Spring In Action 学习记录(二)装配Bean

2.1 Spring配置的可选方案

  1. 在xml中显示配置
  2. 在java中显示配置
  3. 隐式的bean发现机制和自动装配

尽量使用自动装配,当必须用显式配置时,尽量使用JavaConfig而不用XML,只有当你想使用便利的XML命名空间时,且不能在JavaConfig中实现时,才使用XML

2.2 自动化配置Bean

java从两个角度来实现自动装配

  • 组件扫描:Spring会自动发现应用上下文中创建的Bean
  • 自动装配:Spring自动满足bean之间的依赖
2.2.1 创建可被发现的Bean
  • @component:在具体类上方加上@Component即声明该类可以被扫描到并作为组件类
  • @ComponentScan:表明启用组件扫描如基于Java的Spring配置:
import ...
@Configuration
@ComponentScan
public class CDPlayerConfig{
}

上诉配置只会扫描配置类所在包或子包的组件类
或者在XML文件中配置:

<context:component-scan base-package="soundsystem" />
2.2.2 为组件扫描的bean命名

Spring应用上下文中所有的bean都会给定一个id,如果我们没有指定,那么一个类的id默认为把首字母换成小写的类名,也可以使用@component(“nameid”)指定一个类的id,也可以使用@Name(“nameid”)但一般都是用@component

2.2.3 设置组件扫描的基础包

使用@ComponentScan(“ClassPath”)可以指定扫描哪个包,默认扫描基础包
也可以扫描多个基础包如:@ComponentScan(“ClassPath1”,"ClassPath2")
也可以使用@ComponentScan(“A.class”,"B.class"),表示的是扫描该类所在包下的所有组件类

2.2.4 通过为bean添加注解实现自动装配

使用@Autowired注解声明自动装配,该注解可以放在构造器上,setter()方法上,和声明的局部域上
不管在哪里声明了@AutoWired,Spring都会把这上面的依赖加载进来,如果没有匹配的bean,Spring就会抛出一个异常,为了避免异常的发生可以将@Autowired的required设置为false:@Autowired(required=false)

2.2.5 验证自动装配

2.3 通过Java代码装配Bean

当你是用第三方库中的类时,你并不能自己手动为类加上@component或者@autowired注解,那就必须用显式配置

2.3.1 创建配置类

最简单的JavaConfig类如下:

import ...
@Configuration
public class CDPlayerConfig{
}
2.3.2 声明简单的bean

要在JavaConfig中声明bean:

@Bean
public A class1(){
	return new Class1();
}

默认情况下该Bean的id与这个方法的方法名一致

2.3.3 借助javaConfig实现注入

最简单的方法是引用创建bean的方法:

@Bean
public CDPlayer cdPlayer(){
	return new CDPlayer(class1())//并不是直接调用class1方法,而是由Spring容器返回的实例对象
}

当然也可以这样:

@Bean
public CDPlayer cdPlayer(Class1 class1){
   return new CDPlayer(class1)
}

2.4 通过XML装配Bean

尽量使用JavaConfig

2.4.1 创建XML配置规范
2.4.2 声明一个简单的

<bean id="class3" class="security.Class3" />

2.4.3 借助构造器注入初始化bean

XML中声明bean只有一种方法,但是DI却有多种方法:

  • 构造器注入bean引用
<bean id="class3" class="security.Class3" >
<constructor-arg ref="compactDisc" />
</bean>

其他不常用

2.4.4 设置属性
<bean id="class3" class="security.Class3" >
<property name="compactDisc" ref="CompactDisc" />
</bean>

2.5 导入和混合配置

2.5.1 在JavaConfig中引用XML配置

我们可以将两个JavaConfig文件合并到一个更大的JavaConfig文件中:

@Configuration
@Import({CDPlayer.class,CDConfig.class})
public class SoundSystemConfig{}

也可以将XML和JavaConfig合并:

@Configuration
@Import(CDPlayer.class)
@ImportResource("classpath:cd-config.xml")
public class SoundSystemConfig{}
2.5.2 在XML中引用JavaConfig
	<import resource="cd-config.xml"
	<bean class="soundsystem.CDConfig"

这样就可以在XML文件中使用JavaConfig文件中的配置

2.6 小结

发布了28 篇原创文章 · 获赞 1 · 访问量 637

猜你喜欢

转载自blog.csdn.net/c630843901/article/details/103446580