注册
登录
Spring加载Bean时注意事项
相同类型中定义相同的bean和在不同类型中定义相同的bean 默认加载方式
1. @Configuration注解标注的配置类中如果存在bean 则优先加载配置类中的bean
2. 如果给bean手动指定了名称 则会全部加载
3. 调用时 如果指定了bean的名称则不可以在使用class方式获取bean
4. 同一类型中多个相同的bean时只能使用名称加载 采用方法名作为默认名称
测试案例
MyDataSourceBean
public class MyDataSourceBean {
@Bean
public MyDataSource myDataSource(){
System.out.println("外部配置类中的MyDataSource");
return new MyDataSource();
}
}
@Configuration
@Import(MyDataSourceBean.class)
public class SpringConfig {
@Bean
public MyDataSource myDataSource(){
System.out.println("spring配置类中的MyDataSource");
return new MyDataSource();
}
}
public class Test {
public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);
}

public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);
ac.getBean(MyDataSource.class);
}

public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);
ac.getBean("myDataSource1");
}

当给bean标记了名称时 不可以在使用class方式加载bean
public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);
ac.getBean(MyDataSource.class);
}

@Configuration
public class SpringConfig {
@Bean(name="myDataSource1")
public MyDataSource myDataSource(){
System.out.println("spring配置类中的MyDataSource 1");
return new MyDataSource();
}
@Bean(name="myDataSource3")
public MyDataSource myDataSource3(){
System.out.println("spring配置类中的MyDataSource 3");
return new MyDataSource();
}
}
public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);
}

public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);
ac.getBean("myDataSource3");
}

public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);
ac.getBean(MyDataSource.class);
}
