java依赖注入inject_@inject依赖注入的过程
首先需要知道实例是如何创建以及如何被注入的,而这一切都由container这个容器进行管理。@H_403_6@1.实例构建class ContainerImpl implements Container {final Map,InternalFactory>> factories;final Map,Set> factoryNamesByType;ContainerImpl( M
首先需要知道实例是如何创建以及如何被注入的,而这一切都由container这个容器进行管理。
@H_403_6@1.实例构建
class ContainerImpl implements Container {
final Map,InternalFactory>> factories;
final Map,Set> factoryNamesByType;
ContainerImpl( Map,InternalFactory>> factories ) {
this.factories = factories;
Map,Set> map = new HashMap,Set>();
for ( Key> key : factories.keySet() ) {
Set names = map.get(key.getType());
if (names == null) {
names = new HashSet();
map.put(key.getType(),names);
}
names.add(key.getName());
}
for ( Entry,Set> entry : map.entrySet() ) {
entry.setValue(Collections.unmodifiableSet(entry.getValue()));
}
this.factoryNamesByType = Collections.unmodifiableMap(map);
}
...
}
构造时,传入factories和factoryNamesByType。前者是根据key(由class和name组成)查找类的实例构造方法(授人以鱼不如授人以渔),以此来构造实例,然后进行依赖注入。后者是根据class查找所有的实现类名。
2.injector注入器
class ContainerImpl implements Container {
final Map,List> injectors =
new ReferenceCache,List>() {
@Override
protected List create( Class> key ) {
List injectors = new ArrayList();
addInjectors(key,injectors);
return injectors;
}
};
...
}
注入器包括属性注入器和方法注入器等。(每个@injector注解都会被解析为一个注入器类,FieldInjector、MethodInjector)。ReferenceCache继承Map并对其做了扩展,当get(key)时,如果不存在,则会调用create方法创建相应的injectors。injector内部有个inject方法,会调用method.invoke从而调用加了@inject注解的方法(针对方法@inject,属性@inject类似)
相关文章
总结
以上是编程之家为你收集整理的@inject依赖注入的过程全部内容,希望文章能够帮你解决@inject依赖注入的过程所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250
更多推荐
所有评论(0)