7.Bean的自动装配
Spring中bean有三种装配机制,分别是在xml中显式配置,在java中显式配置,隐式的bean发现机制和自动装配
Spring的自动装配需要通过两个操作来实现,一是组件扫描,spring会自动发现应用上下文中所创建的bean,二是自动装配,spring自动满足bean之间的依赖,也就是我们说的IoC/DI
新建实体类
package com.dream.pojo;public class Cat {public void shout(){System.out.println("miao~");}
}
package com.dream.pojo;public class Dog {public void shout(){System.out.println("wang~");}
}
package com.dream.pojo;public class User {private Cat cat;private Dog dog;private String str;public Cat getCat() {return cat;}public void setCat(Cat cat) {this.cat = cat;}public Dog getDog() {return dog;}public void setDog(Dog dog) {this.dog = dog;}public String getStr() {return str;}public void setStr(String str) {this.str = str;}
}
编写Spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="dog" class="com.dream.pojo.Dog"/><bean id="cat" class="com.dream.pojo.Cat"/><bean id="user" class="com.dream.pojo.User"><property name="cat" ref="cat"/><property name="dog" ref="dog"/><property name="str" value="张三"/></bean>
</beans>
测试
import com.dream.pojo.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class MyTest {@Testpublic void testMethodAutowire() {ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");User user = (User) context.getBean("user");user.getCat().shout();user.getDog().shout();}
}
按名称自动装配(byName)
<bean id="dog" class="com.dream.pojo.Dog" />
<bean id="cat" class="com.dream.pojo.Cat"/>
<bean id="user" class="com.dream.pojo.User" autowire="byName"><property name="str" value="张三"/></bean>
autowire="byName"会先查找其类中所有的set方法名,获得set后面且首字母变为小写的字符串,然后去Spring容器中查找是否有此字符串名称id的对象,如果有就取出注入
按类型自动装配(byType)
<bean id="doggg" class="com.dream.pojo.Dog" />
<bean id="cccat" class="com.dream.pojo.Cat"/>
<bean id="user" class="com.dream.pojo.User" autowire="byType"><property name="str" value="张三"/></bean>
注意同一类型的对象,在spring容器中必须唯一
使用注解
在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
开启属性注解支持
<context:annotation-config/>
@Autowired
按类型自动转配,不支持id匹配
@Autowiredprivate Cat cat;@Autowiredprivate Dog dog;private String str;
<bean id="dog" class="com.dream.pojo.Dog"/><bean id="dog2" class="com.dream.pojo.Dog"/><bean id="cat" class="com.dream.pojo.Cat"/><bean id="user" class="com.dream.pojo.User"><property name="str" value="张三"/></bean>
@Autowired(required=false) 对象可以为null
@Autowired(required = false)
private Cat cat;
@Autowired加上@Qualifier可以先根据byName的方式自动装配,@Qualifier不能单独使用
<bean id="dog1" class="com.dream.pojo.Dog" /><bean id="dog2" class="com.dream.pojo.Dog" /><bean id="cat1" class="com.dream.pojo.Cat"/><bean id="cat2" class="com.dream.pojo.Cat"/><bean id="user" class="com.dream.pojo.User" ><property name="str" value="张三"/></bean>
@Autowired@Qualifier(value = "cat2")private Cat cat;@Autowired@Qualifier(value = "dog1")private Dog dog;private String str;
@Resource
如有指定的name属性,先按该属性进行byName方式查找装配,其次再进行默认的byName方式进行装配,如果以上都不成功,则按byType的方式自动装配
<bean id="dog" class="com.dream.pojo.Dog" /><bean id="dog2" class="com.dream.pojo.Dog" /><bean id="cat2" class="com.dream.pojo.Cat"/><bean id="user" class="com.dream.pojo.User" ><property name="str" value="张三"/></bean>
@Resource(name = "cat2")private Cat cat;@Resourceprivate Dog dog;private String str;
7.Bean的自动装配相关推荐
- Spring精华问答 | Spring Bean的自动装配是怎么回事?
戳蓝字"CSDN云计算"关注我们哦! Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Sprin ...
- Spring之 Bean的自动装配
什么是Spring Bean的自动装配? 自动装配是Spring满足bean依赖一种方式 Spring会在上下文种自动寻找,并自动给bean装配属性 Spring种有三种装配方式 1.在xml种显示配 ...
- Spring基础——在 Spring Config 文件中基于 XML 的 Bean 的自动装配
一.Spring IOC 容器支持自动装配 Bean,所谓自动装配是指,不需要通过 <property> 或 <constructor-arg> 为 Bean 的属性注入值的过 ...
- ❤️Bean的自动装配(详细)
❤️Bean的自动装配(详细) 自动装配是Spring满足bean依赖的一种方式! Spring会在上下文中自动寻找,并自动给bean装配属性! 在Spring中有三种自动装配的方式 在xml中显示的 ...
- Spring之Bean的自动装配
Spring从入门到精通–(4)Spring之Bean的自动装配 作者:进击攻城狮 个人主页:欢迎访问我的主页 首发时间:2022年8月5日星期五 订阅专栏:Spring入门到精通 个人信条:星光不问 ...
- [Spring实战系列](12)Bean的自动装配
Spring提供了4种各具特色的自动装配策略: 类型 说明 no 默认方式,Bean的引用必须通过XML文件中的</ref>元素或者ref属性手动设定. byName 把与Bean的属性具 ...
- 万字详解! Spring Bean的自动装配
点击上方 Java学习之道,选择 设为星标 每天18点,干货准时奉上! 何为自动装配 自动装配是 Spring 满足 bean 依赖的一种方式. 在使用 Spring 配置 bean 时,我们都要给配 ...
- Spring-04 Bean的自动装配
Bean的自动装配 1.自动装配是Spring满足Bean依赖的一种方式 2.Spring会在上下文中自动寻找,并自动给Bean装配属性 Spring中bean有三种装配机制,分别是: 1 在xml中 ...
- Bean的自动装配:autowire
Bean的自动装配 Bean的自动装配 Spring IOC容器可以自动装配Bean.需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式 public class Ca ...
- Bean的自动装配(autowire)
自动装配 介绍 测试 环境搭配 创建三个实体类 beans.xml 结果 byname自动装配 更改上面的beans.xml 结果 再次修改beans.xml 修改beans.xml byType 测 ...
最新文章
- 解决ScrollView嵌套ListView高度的问题
- 文献学习(part41)--Locality constraint distance metric learning for traffic congestion detection
- Hibernate5-1对多(1:n)-级联删除-cascade=delete-orphanl
- 变量的解构赋值(对象)
- Fuel9.0下的neutron-network网络(实际环境)--有疑问
- VB中DoEvents的注意事项
- 启动开源项目 XDD
- 524.通过删除字母匹配到字典里最长的单词(力扣leetcode) 博主可答疑该问题
- 二 详解VBA编程是什么
- JavaCV最小依赖
- 计算机cdr教程,计算机平面设计案例教程 (Photoshop+CorelDRAW)
- sofa-seata
- [c#]使用Fleck实现简单的WebSocket含兼容低版本IE
- npm 和 yarn 安装和卸载包
- [嵌入式基础]-arm架构和x86架构区别
- ElasticSearch之HTTP索引操作和文档操作
- spring 注解@primary解析
- SAE英文会议论文模板及翻译
- java小游戏(连连看)
- 数据库设计第一范式(1NF)