Spring学习笔记(一)装配
2020-06-28 04:39
447 查看
spring配置方式
一、综述
Spring容器负责创建应用程序中的
bean并通过
DI(依赖注入)来协调他们的关系,那么我们需要去告诉
Spring需要创建哪些
bean以及如何将其组合到一起(那么
bean的装配就可以通俗的理解为依赖关系的注入)。在自动配置的方式中,使用
@Component去告诉
Spring,我是一个
bean,你要来管理我,然后使用
@AutoWired注解去装配
bean。在
JavaConfig中,
@Configuration加上这个注解的类的作用你可以理解为这个配置类相当于
xml文件的作用,
@Bean就可以理解为
xml中的
bean标签
隐式的bean发现机制(包扫描)和自动装配
在Java中显式配置
在XML中显式配置
上述是几种基本的方式,当然我们也可以采用混用不同的配置方式如下:
在Java中引用xml中配置的Bean
在XML中引用Java中配置的Bean
二、不同方式装配具体说明
1. 自动化装配
想要实现自动化装配我们可以从两个方向考虑:
- 组件扫描,Spring自动发现应用上下文中创建的bean
- 自动装配,Spring自动满足Bean之间的依赖
(1)首先我们需要开启组件扫描(默认不开启)
@ComponentScan注解方式开启
在包扫描的过程中,都是从基础包开始扫描,扫描它下面的所以类
# 我们需要扫描的包和当前类不在一个包里面,需要显示说明基础包 @ComponentScan(basePackages=”类名“) # 我们如果有多个基础包 @ComponentScan(basePackages={”类名1“,”类名2“,...}) @ComponentScan(basePackageClasses={类名1.class,类名2.class,...})#建议这种写法
<context:component-Scan base-package="包名">XML方式开启,当然也可以利用它的子标签实现不扫描哪些包,只扫描哪些包。
(2)其次我们需要让Spring知道哪些需要创建Bean也就是哪些POJO需要添加到容器中,这里我们可以使用
@Component注解进行标注。
@Component泛指组件。注意:
@Component一般用在自动装配,它将这个类对应Spring容器中的一个bean。
(3)如果我们还需要自定义这个组件的id就需要这么写
@Component("自定义id"),如果不声明id那就是默认为类名的首字母小写。
(4)为了实现自动装配,满足依赖关系,我们需要借助
@Autowired注解,如果不存在匹配的bean装配到需要的地方,程序将会报错,为避免这种情况我们可以指定
@Autowired的
required属性为
false,即
@Autowired(required=false)bean歧义性解决
2. 通过Java代码装配
实现以下三步
(1)创建配置类
使用
@Configuration声明这个是配置类
推荐做法:将不同功能的
JavaConfig放到不同的类中,如果需要组合使用那么再写相应的配置模块将其组合在一起通过
@import导入需要的配置类,当然你也可以通过
@ImportResource导入需要的
XML配置文件
(2)声明Bean
@Bean是一个方法级别上的注解,主要用在
@Configuration注解的类里, 也可以用在
@Component注解的类里。同时这个
bean的
默认id为
方法名,当然你也可以通过
Bean的
name属性指定
id,就像这样
@Bean(name='自定义id')
可以看这篇文章了解更多Bean的相关
官方文档中文版
(3)实现注入,解决依赖
@Bean带注释的方法可以有任意数量的参数来描述创建这个bean所需的依赖关系。就像下面这样
@Configuration public class AppConfig { //将需要依赖的项作为参数传入 @Bean public TransferService transferService(AccountRepository accountRepository) { return new TransferServiceImpl(accountRepository); } }
3. 通过XML配置文件装配
(1)通过无参构造器装配
<bean id="自定义id可以不写默认有,但最好自己写" class="全限定的类名"></bean>
(2)通过有参构造器装配
<bean id="" class=""> <constructor-arg></constructor-arg> <constructor-arg> <set> <value></value> <ref></ref> </set> </constructor-arg> </bean>
- 通过
<constructor-arg>
子元素传入需要的参数,如果是引用则用到ref
属性,如果是字面量则用到value
属性. - spring3.0以后也可以采用
c-空间命名
,但是它不能传入集合类的参数,而<constructor-arg>
可以。但我们也可使用到util-空间命名
,解决属性为集合的问题
(3)属性设置
属性设置规则:强依赖使用构造器注入,弱依赖使用属性注入。
这里需要用到<property>
子元素,当然你也可以采用P-空间命名
相关文章推荐
- ITCAST视频-Spring学习笔记(Spring如何装配各种集合类型的属性)
- Spring学习笔记Day3:高级装配
- Spring学习笔记—装配Bean
- Spring学习笔记 5. 尚硅谷_佟刚_Spring_自动装配
- ITCAST视频-Spring学习笔记(使用构造器装配属性)
- Spring学习笔记之Bean的装配
- [学习笔记]spring实战-装配Bean
- Spring学习笔记(二) Bean的高级装配
- ITCAST视频-Spring学习笔记(Spring如何装配各种集合类型的属性)
- Spring学习笔记-自动装配
- [Spring]Bean的自动装配Autowire【学习笔记】
- ITCAST视频-Spring学习笔记(用@Resource注解完成属性装配)
- Spring4学习笔记(五):Bean的自动装配
- [原创]java WEB学习笔记99:Spring学习---Spring Bean配置:自动装配,配置bean之间的关系(继承/依赖),bean的作用域(singleton,prototype,web环境作用域),使用外部属性文件
- Spring学习笔记二:高级装配
- Spring学习笔记(7.Spring Bean装配之Aware接口)
- spring学习笔记(13)——注解Autowired自动装配
- Spring学习笔记(五) --- 装配Bean之导入和混合配置
- ITCAST视频-Spring学习笔记(使用构造器装配属性)
- Spring 学习笔记【一】自动装配bean