【Spring】通过注解自动装配 @Autowired, @Resource区别,科普:@Nullable, @Autowired

【爱迪】Spring 之 自动装配 @Autowired, @Resource区别,科普:@Nullable, @Autowired:

 

使用注解前步骤:

  1.导入约束 :在 beans 头部配置 context 约束

  2.配置开启注解的支持 : <context:annotation-config/>

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config/>

</beans>

如图:

 

 

 

准备就绪后,方可使用注解 完成自动装配:

 

 

 

@Autowired (注解自动装配)  首先 以 ByType 的方式匹配,如果不行,就报错

(1)可直接作用在属性上(图一)

(2)可在set方式上使用(图二)

(3)作用在属性上是可去掉 类的 set 方法(图三),因为注解使用的是反射的原理

 

  ★ 如果  @Autowired 注解 自动装配的环境比较复杂,自动装配无法通过一个注解(@Autowired)完成的时候,

    可以使用 @Qualifier(value="xxx")去配置 @Autowired 的使用,指定一个唯一的 bean 对象注入!

例如:

    加之前:

通过名字,找不到 cat 或者 dog ,再而便会通过类型匹配,每个类型因为有两个,所以也匹配不到,故报错

 

 

     

    加之后:

运行成功~

 

 

 

@Resource (同样是自动装配注解,不需要配置,可直接使用,一般不常用)

@Resource(name = "XXX") 指定一个唯一的 bean 对象注入.

 

 

 

 

 总结:

  @Resource 和  @Autowired 的区别:

 

     1. 都是采用自动装配的,都可以放在属性字段上

    2. @Autowired 通过 ByType 的方式实现,而且必须要求这个对象存在!【常用】

    3. @Resource 默认通过 ByName 的方式实现,如果找不到名字,则通过 ByType 实现,如果还找不到,则会报错!

    4. 执行顺序不同: @Autowired 通过 ByType 的方式实现!

 

 

 

 

 

 

 


 

科普:

 

  1. @Nullable : (字段标记了这注解,说明字段可以为空)

   添加这个注解后:这个红框里的name 可以为 null 值;

 

 

 

  2.  @Autowired:  它有一个属性值,当等于 false 时表示 这个对象可以为 null ,否则不允许为空

 

posted @ 2020-02-17 21:21  爱迪的懂  阅读(536)  评论(0)    收藏  举报