@Inject是否不支持接口,而只能注入实现类?

@Inject是否不支持接口,而只能注入实现类?

评论区

xialinlin

2018-10-12 00:10

可以支持接口,如果是接口,需要指名是那个实现类,两种方式指名,第一种在config常量初始化那边指名,第二种,在使用的时候指名,具体参考文档

JFinal

2018-10-12 09:22

如果 @Inject 用在接口上,下面两种方法选择其一:
1:在 @Inject 中指定被注入的实现类
@Inject(ServiceImpl.class)
Service service;

2: 事先映射好接口与实现类的关系
public void configConstant(Constants me) {
Aop.addMapping(Service.class, ServiceImpl.class);
}

然后用的时候可以像以往一样了:
@Inject
Service service;

此外,Aop.addMapping(Class, String) 第二个参数还可以是 String,那么你就可以通过外部配置文件来做映射了,例如外部配置文件中是下面这样:
Service=ServiceImpl.class

映射的时候可以这样:
Aop.addMapping(Service.class, PropKit.get("Service"));

上面的配置方法,可以通过修改配置文件来改变 Service 的实现类

lyq027

2018-10-12 09:25

@xialinlin 好的,谢谢

lyq027

2018-10-12 09:25

@JFinal 明白,谢谢

JFinal

2018-10-12 09:45

@lyq027 一次映射,到处适用,用起来很方便,而且避免了在 @Inject 注解参数中写死,便于将来切换实现

热门反馈

扫码入社