依赖注入的实现?依赖注入的实现原理?@Autowired是spring框架提供的实现依赖注入的注解,主要支持在set方法,field,构造函数中完成bean注入,注入方式为通过类型查找bean,即byType的,如果存在多个同一类型的bean,则使用@Qualifier来指定注入哪个beanName的bean。与JDK的@Resource的区别:@Resource是基于bean的名字,即beanName,来从spring的IOC容器查找bean注入的,而@Autowried是基于类型byType来查找bean注入的。在spring框架内部实现当中,注解实现注入主要是通过bean后置处理器BeanPostProcessor接口的实现类来生效的。
一、spring依赖注入的使用
@Autowired是spring框架提供的实现依赖注入的注释,主要支持set方法、字段、构造函数中的bean注入。注入法是按类型找beans,也就是按类型找。如果有多个相同类型的bean,请使用@Qualifier来指定要注入哪个beanName的bean。
与JDK的@Resource的区别:@Resource是基于bean的名字,即beanName,从spring的IOC容器中查找bean注入,而@ autowritten是基于type byType查找bean注入。
与JDK的@Inject不同:@Inject也是基于类型来寻找bean注入。如果需要指定名称beanName,可以结合使用@Named注释,而@Autowired结合使用@Qualifier注释来指定名称beanName。
二、spring依赖注入注释的实现原理
注释处理器
在spring框架的内部实现中,注释实现注入主要是通过bean后处理器BeanPostProcessor接口的实现类来实现的。BeanPostProcessor后处理器在spring容器启动时创建bean对象实例后立即执行,并处理bean对象实例。
@Autowired通过beanpost处理器接口的实现类autowireannotationBeanPostProcessor实现bean对象对其他bean对象的依赖注入;
@Resource和@Inject是通过beanpostprocessor接口的实现类实现的,顾名思义就是公共注释,公共注释BeanPostProcessor是spring中的一个BeanPostProcessor,统一处理JDK中定义的注释。这个类处理的评论还包括@PostConstruct、@PreDestroy等。
注意处理器的激活条件。
在spring容器的BeanPostProcessor中添加了AutowireannotationBeanPostProcessor和commonannotationbeanpostprocessor,即激活这些处理器的条件如下:
1.基于xml的spring配置
在相应spring容器的配置xml文件中添加和,比如applicationContext.xml,或者只使用。
两者的区别在于只发现并激活已有的bean,比如加载到spring容器的bean是通过xml文件的bean标签生成的,而不是扫描带有@Controller之类注释的bean,找到后注入;除了它的函数之外,它还将在basePackages属性指定的包下加载类,默认情况下,它会扫描@Controller、@Service、@Component、@Repository的注释。如果不指定basePackages,它位于类路径下,或者如果使用注释@ComponentScan,它位于当前类所在的包及其子包下。
2.基于配置类的弹簧配置
如果spring是基于configuration类而不是applicationContext.xml配置的,比如SpringBoot,内部使用的IOC容器实现为AnnotationConfigApplicationContext或者它的派生类,上面的BeanPostProcessor会在AnnotationConfigApplicationContext内自动创建并激活。
如果基于xml的配置和配置类配置都存在,并且基于注释的注入在注入时间上先于基于XML的注入,那么基于XML的注入将覆盖基于注释的注入。
摘要
本文来自网络,不代表「专升本要什么条件_专升本要几年_成人高考专升本_山东专升本信息网」立场,转载请注明出处:http://www.sdzsb8.cn/zsxx/22877.html
- 上一篇:五年级语文《草塘》(语文课文可爱的草塘)
- 下一篇:2019年河南省高考分数段统计