Spring家族框架——Spring8——Bean的基于注解的自动装配

31 篇文章 0 订阅

🌈hello,你好鸭,我是Ethan,一名不断学习的码农,很高兴你能来阅读。

✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。
🏃人生之义,在于追求,不在成败,勤通大道。加油呀!

🔥个人主页:Ethan Yankang
🔥推荐阅读:史上最强八股文||一分钟看完我的几百篇博客

🔥温馨提示:划到文末发现专栏彩蛋   点击这里直接传送

🔥本篇概览:详细讲解了Bean的基于注解的自动装配(仅仅是依赖关系管理,不包括注入Spring)的两种方法——@autowire(@Qualifier)、@Resources以及异同点🌈⭕🔥


【计算机领域一切迷惑的源头都是基本概念的模糊,算法除外】


目录

🌈序言:

1.使用注解实现自动装配

1.1.配置过程

1.1.1.在spring配置文件中引入context文件头

1.1.2.开启属性注解支持!

1.2.使用@Autowired

1.2.1.使用@Autowired替换set方法

1.2.2.此时配置文件内容

1.2.3.测试,成功输出结果!

1.3.使用@Qualifier

1.4.使用@Resources

1.4.1.User类:

1.4.2.beans.xml文件

1.4.3.结论:

2.小结

@Autowired与@Resource异同:

1.目的相同

2.所属范围不同

3.处理机制不同


🌈序言:

上一篇文章我们讲解了spring中的基于XML文件的两种自动装配方式——byname、bytype,(建议先看上一篇文章,再开启以下阅读).

Spring家族框架——Spring7——Bean的基于XML文件的自动装配-CSDN博客

但是同学们想过没有,XML文件的仍然让人感到麻烦,实际开发中用得不多的。那么有没有一种类似于标记的优美的方式实现自动装配(依赖注入)呢?当然是有的,今天这篇文章我们就来详细讲解基于注解的自动装配。这也是实际开发中使用最多的方式。


1.使用注解实现自动装配

使用注解

jdk1.5开始支持注解,spring2.5开始全面支持注解。

准备工作:利用注解的方式注入属性。

1.1.配置过程

1.1.1.在spring配置文件中引入context文件头

xmlns:context="http://www.springframework.org/schema/context"

http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd

1.1.2.开启属性注解支持!

<context:annotation-config/>

1.2.使用@Autowired

(底层实现了set方法,可以直接代替set方法)

  • @Autowired是按类型自动转配的,不支持id匹配。
  • 需要导入 spring-aop的包

测试:

1.2.1.使用@Autowired替换set方法

将User类中的set方法去掉,使用@Autowired注解

public class User {
   @Autowired
   private Cat cat;
   @Autowired
   private Dog dog;
   private String str;

   public Cat getCat() {
       return cat;
  }
   public Dog getDog() {
       return dog;
  }
   public String getStr() {
       return str;
  }
}

1.2.2.此时配置文件内容

<context:annotation-config/>

<bean id="dog" class="com.kuang.pojo.Dog"/>
<bean id="cat" class="com.kuang.pojo.Cat"/>
<bean id="user" class="com.kuang.pojo.User"/>

1.2.3.测试,成功输出结果!

【小狂神科普时间】

@Autowired(required=false) 说明:false,对象可以为null;true,对象必须存对象,不能为null。

//如果允许对象为null,设置required = false,默认为true
@Autowired(required = false)
private Cat cat;

1.3.使用@Qualifier

  • @Autowired是根据类型自动装配的,加上@Qualifier则可以根据byName的方式自动装配
  • @Qualifier不能单独使用。

测试实验步骤:

1、配置文件修改内容,保证类型存在对象。且名字不为类的默认名字!

<bean id="dog1" class="com.kuang.pojo.Dog"/>
<bean id="dog2" class="com.kuang.pojo.Dog"/>
<bean id="cat1" class="com.kuang.pojo.Cat"/>
<bean id="cat2" class="com.kuang.pojo.Cat"/>

2.没有加Qualifier测试,直接报错(报错原因就是上面的依照类型注入时spring里面只能允许一种类型一个对象。)

3.在属性上添加Qualifier注解

@Autowired
@Qualifier(value = "cat2")
private Cat cat;
@Autowired
@Qualifier(value = "dog2")
private Dog dog;

测试,成功输出!

1.4.使用@Resources

自定义name>by name>by type

  • @Resource如有指定的name属性,先按该属性进行byName方式查找装配;
  • 其次再进行默认的byName方式进行装配;
  • 如果以上都不成功,则按byType的方式自动装配。
  • 都不成功,则报异常。

1.4.1.User类:

public class User {
   //如果允许对象为null,设置required = false,默认为true
   @Resource(name = "cat2")
   private Cat cat;
   @Resource
   private Dog dog;
   private String str;
}

1.4.2.beans.xml文件

编写依赖关系

<bean id="dog" class="com.kuang.pojo.Dog"/>
<bean id="cat1" class="com.kuang.pojo.Cat"/>
<bean id="cat2" class="com.kuang.pojo.Cat"/>

<bean id="user" class="com.kuang.pojo.User"/>

测试:结果OK

配置文件2:beans.xml , 删掉cat2

<bean id="dog" class="com.kuang.pojo.Dog"/>
<bean id="cat1" class="com.kuang.pojo.Cat"/>

实体类上只保留注解,去除  @Resource(name = "cat2")中的(name = "cat2")。

@Resource
private Cat cat;
@Resource
private Dog dog;

结果:OK

1.4.3.结论:

先进行byName查找,失败;再进行byType查找,成功。

2.小结

@Autowired与@Resource异同:

1、@Autowired与@Resource都可以用来装配bean(也就是只管依赖关系,不管注入Spring容器。)。都可以写在字段上,或写在setter方法上。

1.目的相同

都是实现依赖注入

2.所属范围不同

@Autowired属于Spring,@Resources属于JAVA自带注解

3.处理机制不同

@Autowired先byType,加上@Qualifier注解后可以实现byname注入。

@Resource先处理字段上的自定义名称,再依据set的名称使用by Name,失败后再by type



💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖

热门专栏推荐

🌈🌈计算机科学入门系列                     关注走一波💕💕

🌈🌈CSAPP深入理解计算机原理        关注走一波💕💕

🌈🌈微服务项目之黑马头条                 关注走一波💕💕

🌈🌈redis深度项目之黑马点评            关注走一波💕💕

🌈🌈Java面试八股文系列专栏            关注走一波💕💕

🌈🌈算法leetcode+剑指offer              关注走一波💕💕


总栏

🌈🌈​​​​​​JAVA后端技术栈                          关注走一波💕💕  

🌈🌈JAVA面试八股文​​​​​​                          关注走一波💕💕  

🌈🌈JAVA项目(含源码深度剖析)    关注走一波💕💕  

🌈🌈计算机四件套                               关注走一波💕💕  

🌈🌈算法                                        ​​​​​​     ​关注走一波💕💕  

🌈🌈必知必会工具集                           关注走一波💕💕

🌈🌈书籍网课笔记汇总                       关注走一波💕💕  

🌈🌈考试复习资料                              关注走一波💕💕  

🌈🌈C/C++技术栈                              关注走一波💕💕  

🌈🌈GO技术栈                                   关注走一波💕💕  


分栏

🌈🌈JAVA后端技术栈

🌈🌈spring                                      关注走一波💕💕         ​

🌈🌈redis                                        关注走一波💕💕

🌈🌈MySQL                               ​​​     关注走一波💕💕 

🌈🌈mybatis                        ​​​​     ​​​​      关注走一波💕💕

🌈🌈mybatisplus                           关注走一波💕💕

🌈🌈MQ                                          关注走一波💕💕

🌈🌈微服务                                     关注走一波💕💕

🌈🌈设计模式                                 关注走一波💕💕

🌈🌈分布式锁                                 关注走一波💕💕


🌈🌈JAVA八股文

JAVA面试八股文(redis、MySQL、框架、微服务、MQ、JVM、设计模式、并发编程、JAVA集合、常见技术场景)

                                                        关注走一波💕💕    

🌈🌈史上最强JAVA八股文(强烈推荐)            

                                                        关注走一波💕💕                                   


🌈🌈JAVA项目(含源码深度剖析)

🌈🌈黑马头条(微服务)             关注走一波💕💕

🌈🌈黑马点评(redis)               关注走一波💕💕


🌈🌈计算机四件套

🌈🌈计算机基础                           关注走一波💕💕

🌈🌈计算机基础                           关注走一波💕💕

🌈🌈计算机网络                           关注走一波💕💕

🌈🌈数据结构与算法                    关注走一波💕💕


🌈🌈算法

🌈🌈leetcode                              关注走一波💕💕

🌈🌈剑指offer                             关注走一波💕💕


🌈🌈必知必会工具集                   关注走一波💕💕


🌈🌈书籍网课笔记汇总

🌈🌈CSAPP笔记                        关注走一波💕💕

🌈🌈计算机科学速成课               关注走一波💕💕

🌈🌈CS自学指南                        关注走一波💕💕

🌈🌈读书笔记与每日记录           关注走一波💕💕


🌈🌈考试复习资料                      关注走一波💕💕


🌈🌈C/C++技术栈                      关注走一波💕💕                           


🌈🌈GO技术栈                          关注走一波💕💕                                                    


📣非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤收藏✅ 评论💬,大佬三连必回哦!thanks!!!
📚愿大家都能学有所得,功不唐捐!

  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值