本章内容:
- 声明bean
- 构造器注入和Setter方法注入
- 装配bean
- 控制bean的创建和销毁
1.Spring配置的可选方案
Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系。但是,作为开发人员,你需要告诉Spring要创建哪些bean并且如何将其装配在一起。
装配机制:
- 在XML中进行显示配置
- 在Java中进行显示配置
- 隐式的bean发现机制和自动装配
建议是尽可能地使用自动装配。显示装配越少越好。当你必须要显示配置bean的时候(比如,有些源码不是你来维护的,而当你需要为这些代码配置bean的时候),推荐使用类型安全并且比XML更加强大的JavaConfig
2.自动化装配bean
Spring从两个角度来实现自动化装配:
- 组件扫描(component scanning): Spring会自动发现应用上下文中所创建的bean
- 自动装配(autowiring):Spring自动满足bean之间的依赖
创建可被发现的bean:在bean上添加@Component注解或其子注解(@Controller、@Service等)
启动组件扫描:通过@ComponentScan实现,默认会扫描与配置类相同的包
为组件扫描的bean命名:默认bean的命名为类名,第一个字母小写,我们也可以在注解中指定,一帮不会做
设置组件扫描的基础包:通过@ComponentScan的basePackages指定
通过为bean添加注解实现自动装配@Autowired
3.通过Java代码装配bean
在使用第三方库中的组件时,没办法在它的类上添加@Component和@Autowired,不能是用自动化装配,我们可以使用Java代码装配bean。
创建配置类:为其添加@Configuration注解,表明这是一个配置类声明简单的bean:要在JavaConfig中声明bean,我们需要编写一个方法,这个方法会创建所需类型的实例,然后给这个方法添加@Bean注解,bean名默认是方法名,可以在@Bean注解属性中指定
借助JavaConfig实现注入:在JavaConfig中装配bean的最简单方法就是应用bean的方法,因为方法上添加了@Bean注解,Spring将会拦截所有对它的调用,并确保直接返回该方法所创建的bean,而不是每次都对其进行实际的调用
4.通过XML装配bean(这个就不记录了)
5.导入和混合配置
关于混合配置,第一件需要了解的事情就是在自动装配时,它并不在意要装配的bean来自哪里。自动装配的时候会考虑到Spring容器中的所有bean
JavaConfig引入其他JavaConfig中的bean:使用@Import注解,其属性指定JavaConfig类