编写一个配置类
@Configuration
public class MyConfig {
@Bean(name = "person02")
public Person person01(){
return new Person("Michael", 10);
}
@Bean(name = "person03")
public Person person(){
return new Person("Steven", 11);
}
@Bean
public PersonService personService(){
return new PersonService();
}
}
}
- @Configuration 注解表示当前类为一个配置类
- @Bean 注解作用于一个返回某个类实例的方法,表示把该类的一个实例注入到容器中。
- @Bean注解如果没有name参数,注入容器的实例默认ID为方法名称。也就是说,name参数的优先级大于方法命。
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
//1
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MyConfig.class);
//2
PersonService personService = applicationContext.getBean(PersonService.class);
personService.print();
//3
String [] beanNames = applicationContext.getBeanNamesForType(Person.class);
for (String name: beanNames
) {
System.out.print(name);
}
}
}
- 代码1表示以MyConfig类当做配置类,并且初始化配置
- 代码2表示从容器中获取指定类的实例
- 代码3表示根据类名获取全部在容器中的实例名称(ID)
public class PersonService {
@Qualifier("person03")
@Autowired
private Person person;
public void print(){
System.out.println(person);
}
}
-
@Autowired表示把容器中的实例注入到对象变量中。
-
因为容器中有两Person类的实例,所以无法确定把哪个实例注入到对象变量中。只有通过@Qualifier进一步确认
-
输出结果
Person{name='Steven', age=11}
person02
person03