Spring注解驱动 @Configuration和@Bean注册组件

1. @Configuration和@Bean注册组件流程

1.1. 依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<properties>
<spring.version>5.1.5.RELEASE</spring.version>
</properties>

<dependencies>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
<scope>provided</scope>
</dependency>
<!-- spring core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>

1.2. 编写Bean

1
2
3
4
5
6
7
8
// 不需要设置@Component组件注解
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {
private String name;
private Integer age;
}

1.3. 编写Bean配置类

以前写是Bean配置文件,现在改为Bean配置类

1
2
3
4
5
6
7
@Configuration // 标识当前类是一个配置类,配置类==配置文件
public class BeanConfig {
@Bean // 给容器注册一个Bean,方法返回类型作为Bean的类型,方法名作为Bean的id
public Person person() {
return new Person("张三", 20);
}
}

1.4. 编写测试方法

以前创建ClassPathXmlApplicationContext,参数是指定配置文件。
现在创建AnnotationConfigApplicationContext,参数是指定配置类

1
2
3
4
5
6
7
8
9
@Test
public void test() {
// 创建AnnotationConfigApplicationContext,指定配置类class
ApplicationContext ioc = new AnnotationConfigApplicationContext(BeanConfig.class);
Person person = ioc.getBean(Person.class);
String[] names = ioc.getBeanNamesForType(Person.class);
System.out.println(person);
System.out.println(Arrays.toString(names)); // 查看Person在容器中的name
}

2. 给Bean命名

@Bean注解的value或name属性可以给Bean命名

1
2
3
@Bean("person1") 
@Bean(value = "person1")
@Bean(name = "person1")

命名示例

1
2
3
4
5
6
7
@Configuration
public class BeanConfig {
@Bean("person1") // 给Bean命名
public Person person() {
return new Person("张三", 20);
}
}

panchaoxin wechat
关注我的公众号
支持一下