JFinal的Inject 依赖注入支持接口类注入吗?

@Inject

IStockInCreateService service;


public interface IStockInCreateService 

在controller中注入后,调用方法时报错,找不到方法!

如果注入实现类的话,可以正常使用

评论区

JFinal

2019-05-02 16:25

两种办法任选其一:
1:配置一下接口到实现类的映射
AopManager.me().addMapping(IService, ServiceImpl.class);

2:在 @Inject 注解中指定实现类
@Inject(ServiceImpl.class)
private IService service;

建议使用第一种方式,一次映射随处可用。而且也方便通过改变映射来改变实现类

hb963724769

2019-05-02 16:38

@JFinal 谢波总回复,顺便问一下,这种注入的方式,相比原来通过类增强方式的注入有什么优点啊。Enhancer.enhance(ServiceImpl.class);

hb963724769

2019-05-02 16:40

@JFinal 第一种方式需要在config中配置,一个项目上百service,在config中总感觉有点怪异!

JFinal

2019-05-02 19:47

@hb963724769 这种注入方式主要是为了省代码,以及可以通过配置来改变被注入的实现类

如果 service 很多,可以将配置放在外部配置文件中,然后用一个 for 循环去加载,类似于:
for ( String c : mappings) {
String[] array = c.splite("|");
AopManager.me().addMapping(Class.forName(array[0]), Class.forName(array[1]));
}

如果觉得配置文件还是麻烦,可以写一个扫描工具类,扫描所有实现类再动态 mapping,办法总比问题多

JFinal

2019-05-02 19:48

此外,如果觉得 config 中配置只是代码多,但仍然可以接受的话,可以做个类似于 MappingKit.java ,将这部分配置独立到一个单独的 java 类中去,这样 config 中的代码就很清爽了

即便是 spring,一样也要有这种机制,例如用注解 或者是 XML,总要有这么个事存在

热门反馈

扫码入社