Spring annotation (注解配置)

编写一个配置类

@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
发布了70 篇原创文章 · 获赞 4 · 访问量 3053

猜你喜欢

转载自blog.csdn.net/qq_34515959/article/details/104890910