Spring笔记:bean的自动装配
Posted 驰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring笔记:bean的自动装配相关的知识,希望对你有一定的参考价值。
时间:2021/10/27
一.在Spring中有三种装配的方式:
- 在xml中显示配置
- 在java中显示配置
- 隐式的自动装配
二.Spring的自动装配方法:
- ByName自动装配:会自动在容器上下文中查找,和自己对象set方法后面的值(属性名)对应的bean id。
- ByType自动装配:会自动在容器上下文中查找,和自己对象属性类型相同的bean(看class)。
三.总结:
- ByName时,需要保证所有bean的id唯一,并且这个bean需要和自动注入的属性的set方法的值一致。
- ByType时,需要保证所有bean的class唯一,并且这个bean需要和自动注入的属性的类型一致。
努力,向上,自律
Spring学习笔记——装配Bean
1、Spring配置的可选方案
- 在XML中进行显式配置。
- Java中进行显式配置。
- 隐式的bean发现机制和自动装配。
2、自动化装配bean
Spring从两个角度来实现自动化装配:
- 组件扫描(component scanning): Spring会自动发现应用上下文中所创建的bean。
- 自动装配(autowiring): Spring自动满足bean之间的依赖 。
2.1、创建可被发现的bean——@Component(在POJO实现类上添加@Component注解);
2.2、启用组件扫描——@ComponentScan
- 在java配置类上添加@ComponentScan注解启用组件扫描
@Configuration @ComponentScan public class DemoConfig { }
- 通过XML启用组件扫描
<beans ... >
<context:component-scan base-package="" />
</beans>
- 通过@Autowired注解实现自动装配
2.3、为组件扫描的bean命名
- @Component("beanName");
- @Named("beanName");
2.4、设置组件扫描的基础包
- 如果是通过Java配置类进行配置的,默认配置类所在的包为基础包;
- 通过basePackages配置组件扫描的基础包——@ComponentScan(basePackages={"xxx", "xxxx"});
- 将其指定为包中包含的类或接口——@ComponentScan(basePackageClasses={xxx.class, xxxx.class});
2.5、通过为bean添加注解实现自动装配——@Autowired。@Autowired = @inject
- 在属性上使用@Autowired;
- 在构造方法上使用@Autowired;
- 在setter方法上使用@Autowired;
- 在任何方法上使用@Autowired。
3、通过Java代码装配bean
@Configuration // 使用@Autowired声明该类为配置类 public class CDPlayerConfig { @Bean // 默认情况下bean的ID与带有@Bean注解的方法名相同
public CompactDisc sgtPeppers() {
return new SgtPeppers();
}
@Bean(name="beanName")
public CompactDisc sgtPeppers2() {
return new SgtPeppers();
}
@Bean
public CDPlayer cdPlayer(CompactDisc compactDisc) {
return new CDPlayer(compactDisc);
}
}
4、通过XML装配bean
<?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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.10.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.10.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.10.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.10.xsd"> <!-- 配置数据源 --> <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- 扫描Mybatist配置文件 --> <bean name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactory"> <property name="dataSource" ref="dataSource" /> <property name="mapperLocations" value="classpath:mysql/*.xml"/> </bean> <!-- Mapper扫描配置 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.zhux.user.dao"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean> </beans>
5、导入和混合配置
5.1、在JavaConfig中引用XML配置;
5.2、在XML配置中引用JavaConfig。
以上是关于Spring笔记:bean的自动装配的主要内容,如果未能解决你的问题,请参考以下文章