装配Bean
创建应用中对象之间协作关系的行为通常称为装配
Spring配置的可选方案
- 在XML中进行显示配置
- 在Java中进行显示配置
- 隐式bean发现机制和自动装配
自动化装配Bean
spring从两个角度来实现自动化装配:
- 组件扫描
- 自动装配
组件扫描和自动装配组合在一起就能发挥出强大的威力,它们能够将你的显式配置降低到最少
工程例子
mvn
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
配置类
package com.demo.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* Created by jinxiong on 2018/9/9.
*/
// 不写包路径的话为 扫描的是 此类的包以及子包
@ComponentScan()
@Configuration
public class SpringConfig {
}
需要放置在Spring容器中的bean
package com.demo.bean;
import org.springframework.stereotype.Component;
/**
* Created by jinxiong on 2018/9/9.
*/
@Component
public class Person {
private String name;
private String address;
}
测试类
package com.demo.test;
import com.demo.bean.Person;
import com.demo.config.SpringConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
public class Test01 {
@Autowired
private Person person;
@Test
public void test01(){
System.out.println(person.toString());
}
}
通过Java代码装配Bean
使用@Configuration注解,该注解表明这个类是一个配置类该类应该包含在Spring应用上下文创建bean的细节
@Configuration
public class BeanConfig {
@Bean
public Address address() {
return new Address();
}
}
通过XML装配bean
<bean class="com.demo.bean.User" />
因为没有指定bean的Id,默认就是 com.demo.bean.User#0 其中#0是计数形式,用来区分此类型的其他bean,比如你再声明一个User类型的bean并且不指定id 那么它的id就是com.demo.bean.User#1
借助构造器注入初始化bean
构造器注入,有两种基本的配置方案可供选择
- <constructor-arg> 元素
- 使用spring 3.0 引入的c-命名空间
image
image
网友评论