Spring第七弹—依赖注入之注解方式注入及编码解析@Resource原理

Posted 人艰不拆_zmc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring第七弹—依赖注入之注解方式注入及编码解析@Resource原理相关的知识,希望对你有一定的参考价值。

    注入依赖对象可以采用手工装配或自动装配,在实际应用中建议使用手工装配,因为自动装配会产生未知情况,开发人员无法预见最终的装配结果。

手工装配依赖对象 

手工装配依赖对象,在这种方式中又有两种编程方式

  1. 在xml配置文件中,通过在bean节点下配置,上边博客已经讲解,再次不在缀余。
  1. 在java代码中使用@Autowired或@Resource注解方式进行装配。但我们需要在xml配置文件中配置以下信息:

 

PS:

这个配置隐式注册了多个对注解进行解析处理的处理器:AutowiredAnnotationBeanPostProcessor,CommonAnnotationBeanPostProcessor,PersistenceAnnotationBeanPostProcessor,RequiredAnnotationBeanPostProcessor

PS:之前我写过注解原理的博客,再此多说一句,注解本身和xml一样都是用于配置的,本身并不能干活,它之所以能干活,是因为它背后存在着处理器(也就是对应api)。

PS: 需要引入common-annotations.jar文件。

@Autowired和@Resource注解详解

在java代码中使用@Autowired或@Resource注解方式进行装配,这两个注解的区别是:@Autowired 默认按类型装配,@Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。

@Autowired注解是按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false。如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下:

@Resource注解和@Autowired一样,也可以标注在字段或属性的setter方法上,但它默认按名称装配。名称可以通过@Resource的name属性指定,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象。

注意:如果没有指定name属性,并且按照默认的名称仍然找不到依赖对象时, @Resource注解会回退到按类型装配。但一旦指定了name属性,就只能按名称装配了。

PS:@Resource在jdk中已经存在,不属于Spring,所以尽量使用这个注解。

编码剖析@Resource的原理:

自定义注解(模仿@Resource):

PersonSevicebean:

自定义注解(zmcResource)处理器:

以上是关于Spring第七弹—依赖注入之注解方式注入及编码解析@Resource原理的主要内容,如果未能解决你的问题,请参考以下文章

spring中依赖注入的原理

Spring之IOC-注解方式

spring之注解概述

Spring bean依赖注入bean的装配及相关注解

Spring 依赖注入(DI)详解 [Spring][依赖注入的 6 种实现方式][setter注入][构造器注入][注解注入][自动装配注入][静态工厂注入][实例工厂注入]

spring笔记--依赖注入之针对不同类型变量的几种注入方式