依赖注入问题

如果一个接口有两个实现类,在注入接口的时候,我需要选择一个其中的一个实现类注入,要怎么样实现?这时候就只能注入具体的实现类,不能注入接口吗?

能否像Guice一样,增加选择注入类的功能?

评论区

JFinal

2019-01-05 16:20

@Inject 注解可以指定被注入的类型:
@Inject(Aaa.class)

也可以事先建立映射:
Aop.addMapping(Aaa.class, AaaImpl.class);

看一下相关文档:
https://www.jfinal.com/doc/4-6

vimer

2019-01-14 18:42

@JFinal 可能我描述的不够清楚,我的意思是:
如Aaa.class有两个实现类,AaaImpl1.class和AaaImpl2.class
现在使用时我需要注入的时候就会有无法选择的问题,建立映射只能选择一个实现类建立吧,没有办法选择两个

JFinal

2019-01-14 22:43

@vimer 映射是一一对应的,不能动态变动,否则会有线程安全问题,但是可以实现你的需求

先是选择一个最常用的实现类来进行映射,然后在需要打破映射的地方使用下面的两种方式:
1:在 @Inject 中指定实现类
@Inject(AaaBbbImpl.class)
Aaa aaa;

2:让承载类型为实现类
@Inject
AaaBbbImpl

vimer

2019-01-15 16:28

@JFinal 明白了,非常感谢,不过您说的线程安全问题我还是不大明白,回去再认真看看源码吧

热门反馈

扫码入社