1. 如何给容器中注入组件
@Configuration:给容器中添加一个用于表示配置信息的组件
@Bean:将对象作为组件注入到容器中
实战演示
- 首先声明一个 Person 类,其只有两个属性 name 和 age
- 声明一个 的配置类,并且将其作为一个配置类型的组件注入到容器中。
- 由于 @Bean 注解一般不能用于类上,都是方法级别的注解,通常为了代码设计,一般将bean组件与配置类一起注入。
public class Person {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Person(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public Person() {
super();
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
@Configuration
public class MainConfig {
@Bean
public Person person() {
return new Person("zhangsan", 20);
}
}
2. 支持组件自定义名称
@Bean注解是给IOC容器中注册一个bean,类型自然就是返回值的类型,bean 的名称默认采用方法名,当然用户可以通过属性自己定义。
比如我可以给容器注入两个组件,一个叫做child,一个叫做 adult
@Bean(value = "child")
public Person personChild() {
return new Person("张三", 20);
}
@Bean(value = "adult")
public Person personAdult() {
return new Person("蜡笔小新", 20);
}
通过测试类查看当前容器中存在的所有 组件
public class TestMain {
public static void main(String[] args) {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
System.out.println("=====所有的Bean对象=====");
String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
for (String s : beanDefinitionNames) {
System.out.println(s);
}
}
}
通过输出我们可以看出
=====所有的Bean对象=====
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalRequiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
mainConfig
child
adult
同样 @Configuration 也可以自定义名称,则会在容器中按照自定义的名称命名。
@Configuration(value = "secondConfig")
public class MainConfig {
……
}