1.Spring提供了三种装配bean的方式:
Spring容器负责创建应用程序中的Bean并通过DI来协调这样对象之间的关系。Spring主要提供了三种主要的装配机制:
- 在XML中进行显示配置
- 在Java中进行显示配置
- 隐式的Bean的发现机制和自动装配
2.自动化装配Bean
Spring从两个角度来实现自动化装配:
- 组件扫描(Spring自动发现应用中上下文所需要的创建的Bean),
- 自动装配(Spring自动满足Bean之间的依赖)
配置组件扫描包(组件扫描)
- 在Java类中配置组件扫描 @ComponentScan("com.test.controller")
- 在XML配置文件配置组件扫描 <context:component-scan base-package="com.test.controller,com.test.service"/>
创建可被发现的Bean
@Component public class A{ private boolean abc() { System.out.println("测试..."); } } @Component public class B{ @Autowired private A a; private boolean bcd() { a.abc(); } }
为组件扫描的Bean命名及自动配置
@Configuration // 三种不同的扫描配置 //@ComponentScan(basePackages= {"com.b.dao","com.c.dao"}) //@ComponentScan(basePackageClasses= {A.class,B.class}) @ComponentScan(basePackages= "com.a.dao") public class Spring4Test { // 两种自动配置方式,哪种都是可以的 @Autowired private InsideTest insideTest; @Inject private InsideTest_ insideTest_; } /** * 注:Spring支持将@Named作为@Component注解的代替方案,两者有一些细微的差异 * 但是在大多数场景中,它们是可以相互替换的。 */ @Component("insideTest") class InsideTest{ // 这里给组件命名的方式是@Component("insideTest") } @Named("insideTest_") class InsideTest_{ // 这里给组件命名的方式是@Named("insideTest_") }
3.通过Java代码装配Bean
// 创建配置类 @Configuration public class Spring4Test { @Bean public AookTest aook(){ return new AookTest(); } @Bean public BookTest book(){ return new BookTest(aook()); } } // 测试类AookTest class AookTest{ public void month() { System.out.println("调用成功..."); } } //测试类BookTest class BookTest{ private AookTest aookTest; public BookTest(AookTest aook) { this.aookTest = aook; } public void mainTest() { aookTest.month(); } } //测试类CookTest class CookTest{ public static void main(String[] args) { AnnotationConfigApplicationContext annot = new AnnotationConfigApplicationContext(Spring4Test.class); BookTest bean = annot.getBean(BookTest.class); bean.mainTest(); } }
4.通过XML装配Bean
在Spring低版本中,XML中采用的是基于DTD的配置方式,Spring4.0配置升级后是基于Schema的配置方式,虽然升级是向后兼容的,但后者是我们首选的XML配置方式。 一个基本的基于Schema的XML配置模板如下:
<?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" xsi:schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <bean id="bookTest" class="com.china.BookTest"> <property name="aookTest" ref="aookTest" /> </bean> <bean id="aookTest" class="com.china.AookTest"/> </beans>
- xmlns="http://www.springframework.org/schema/beans" 默认命名空间
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 自定义命名空间,
- xsi是简称 xsi:schemaLocation 是个命名空间对应的schema文件
实际项目中我们通常都会选择组合使用 :
①隐式的Bean发现机制和Java中进行装配进行组合 ②隐式的Bean发现机制和XML配置进行组合
这样便于我们更方便的配置Spring项目