首页 > 其他分享 >guice AssistedInject 简单说明

guice AssistedInject 简单说明

时间:2022-10-02 10:22:47浏览次数:76  
标签:String guice AssistedInject userContext 简单 password public AppDemoInject name

guice AssistedInject 主要的场景是解决一个对象的创建同时依赖一个实例访问以及ioc 容器,通用的解决方法
是通过工厂方法,因为比较常见,所以guice 提供了一个扩展,可以解决类似问题,对于需要使用的时候我们
需要基于工厂方法注入

参考实例

  • AppDemoInject
    需要依赖ioc 容器的bean 以及实例的
 
package com.dalong;
 
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
 
public class AppDemoInject {
 
    private UserContext userContext;
    private  String name;
    private String password;
    @Inject
    public  AppDemoInject(@Assisted("name") String name,@Assisted("password") String password, UserContext userContext) {
        this.name=name;
        this.password=password;
        this.userContext=userContext;
    }
   // 工厂方法
public interface  Factory { 
    // 此处因为类型相同,我们需要明确名称,基于Assisted 指明
    AppDemoInject create(@Assisted("name") String name,@Assisted("password") String password);
}
 
    public String info(){
        return  String.format("%s----------%s--------%s",name,password,userContext.context().get("name"));
    }
}

UserContext bean

@ImplementedBy(DefaultUserContext.class)
public interface UserContext {
 
  default   Map<String,Object>  context()  {
      Map<String,Object>  result = new HashMap<>();
      result.put("name","demoapp");
      return result;
  }
}
  • UserLogin 使用AppDemoInject
    基于工厂方法注入
 
public class UserLogin {
 
    private UserContext userContext;
    private TokenContext tokenContext;
 
    @Inject
    private  AppDemoInject.Factory factory;
 
    @Inject
    public  UserLogin (UserContext userContext, TokenContext tokenContext){
        this.tokenContext=tokenContext;
        this.userContext=userContext;
    }
    public  void doLogin(String name,String password){
         AppDemoInject app = factory.create(name,password);
         String result = app.info();
        System.out.println(result);
    }
}
  • 入口测试
Injector injector = Guice.createInjector(new AbstractModule() {
        @Override
        protected void configure() {
           // 使用AssistedInject 解决
            install(new FactoryModuleBuilder().build(AppDemoInject.Factory.class));
        }
    });
UserLogin userLogin = injector.getInstance(UserLogin.class);
userLogin.doLogin("dalong","demoapp");

说明

以上模式使用场景还是比较多的,比如graylog 开发中,使用了不少此模式,而且从实践上,比较喜欢直接将工厂方法放到bean 中,类似上边的玩法

参考资料

https://github.com/google/guice/wiki/AssistedInject

标签:String,guice,AssistedInject,userContext,简单,password,public,AppDemoInject,name
From: https://www.cnblogs.com/rongfengliang/p/16748323.html

相关文章

  • 605. 简单乘积
    文章目录​​Question​​​​Ideas​​​​Code​​Question读取两个整数值。在此之后,计算它们的乘积并将结果存储在名为PROD的变量中。输出结果如下例所示。输入格式共......
  • leetcode 538. Convert BST to Greater Tree 把二叉搜索树转换为累加树(简单)
    一、题目大意给出二叉搜索树的根节点,该树的节点值各不相同,请你将其转换为累加树(GreaterSumTree),使每个节点node的新值等于原树中大于或等于node.val的值之和。提......
  • graylog 的journal message 实现简单说明
    graylog的journalmessage做为graylog背压的处理还是比较重要的一个模块,以下说明下具体实现功能接口图  简单调用关系  启动入口LocalKafkaJournal类......
  • graylog 的journal message 存储简单说明
    graylogjournalmessage是一个数据的背压处理策略,默认graylog对于消息是基于disruptor处理的,里边包含了buffer,但是如果消息比较多,来不及处理的journalmessage存储就......
  • 力扣209(java)-单词规律(简单)
    题目:给定一种规律pattern 和一个字符串 s ,判断s 是否遵循相同的规律。这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存......
  • ES6简单入门
    前言有关ES6详情​​参考​​ES6是ECMAScript6,js的核心是ECMAScript入门var声明的变量作用域为全局ES6新增了let,声明的变量作用域为代码块,也即是作用域为某个函数,因此在同一......
  • 线段树的简单扩展及应用
    线段树的简单扩展及应用参考:线段树的高级用法-Alex_Wei注:这篇文章只开了个头就鸽了,如果真的准备学到点什么的话可以直接点上面这篇文章(前言线段树作为一种有效维护区......
  • flask后端简单demo
    1、flaskdemofromflaskimportFlask,Blueprint,requestfromflask_sqlalchemyimportSQLAlchemyapp=Flask(__name__)#数据库app.config['SQLALCHEMY_TRACK......
  • 简单-1694. 重新格式化电话号码
    给你一个字符串形式的电话号码 number 。number 由数字、空格 ''、和破折号 '-' 组成。请你按下述方式重新格式化电话号码。首先,删除 所有的空格和破折号。其......
  • 使用 Fuse 和 java 17 编写一个简单的文件系统
    使用Fuse和java17编写一个简单的文件系统Photoby扬·安东宁·科拉尔on不飞溅目标是探索ProjectPanama的外部链接器功能并创建我们的简单文件系统。我们将......