0%

注解Configuration和注解bean

文章字数:317,阅读全文大约需要1分钟

@Configuration@Bean是Spring中常用的用于配置的Bean的两个注解(将@Bean注解的方法返回的类注入spring)

@Bean

  • 定义

    1
    2
    3
    //用于注解方法和注解的定义
    @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
    @Retention(RetentionPolicy.RUNTIME)
  • 适用范围
    @Bean可作用于组件@Component,该注解及其扩展注解均可使用:
    @Component定义类为组件,并且注入Spring中
    @Repository定义DAO层
    @ServiceService服务层类
    @Controller控制层类
    @Configuration标记这是一个配置Bean的类,通常和@bean一起使用。可以使用类中的其它@Bean注入的bean,其它不行。

  • 作用

    用@Bean注解的方法:会实例化、配置并初始化返回一个新的对象,这个对象会由spring IoC 容器管理。

    1
    2
    3
    4
    5
    6
    7
    @Configuration
    public class AppConfig{
    @Bean
    public MyService myService(){
    return new MyServiceImpl();
    }
    }

    相当于 (beam默认使用注解方法名作为bean的id)

    1
    2
    3
    <beans>
    <bean id="myService" class="com.acme.services.MyServiceImpl">
    </beans>

    给bean起名

    1
    2
    3
    4
    //指定名称
    @Bean(name = "myFoo")
    //指定多个名字
    @Bean(name = { "dataSource", "subsystemA-dataSource", "subsystemB-dataSource" })

@Configuration

@Configuration@Component区别在于@Configuration可以在注入类内依赖的Bean,即上一个方法注入的bean可以被下一个方法获取使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
@Configuration
public class ExampleConfiguration{
@Bean
public DataSource dataSource(){
return new BasicDataSource();
}

@Bean
public PlatformTransactionManager transactionManager(){
//直接调用上面的方法,在@Configuration中是使用上个方法注入的Bean而不是执行方法返回的新对象。
return new DataSourceTransactionManager(dataSource());
}
}