【转】@bean和@component

转: https://blog.csdn.net/u011263417/article/details/79781686

Spring帮助我们管理Bean分为两个部分,一个是注册Bean,一个装配Bean。完成这两个动作有三种方式,一种是使用自动配置的方式、一种是使用JavaConfig的方式,一种就是使用XML配置的方式。在自动配置的方式中,使用@Component去告诉Spring,我是一个bean,你要来管理我,然后使用@AutoWired注解去装配Bean(所谓装配,就是管理对象直接的协作关系)。然后在JavaConfig中,@Configuration其实就是告诉spring,spring容器要怎么配置(怎么去注册bean,怎么去处理bean之间的关系(装配))。那么久很好理解了,@Bean的意思就是,我要获取这个bean的时候,你spring要按照这种方式去帮我获取到这个bean。到了使用xml的方式,也是如此。君不见标签就是告诉spring怎么获取这个bean,各种就是手动的配置bean之间的关系。

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

@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }   
}

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

相当于在 XML 文件中配置

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

   
   
  • 1
  • 2
  • 3
  • 4

生成对象的名字:默认情况下用@Bean注解的方法名作为对象的名字。但是可以用 name属性定义对象的名字,而且还可以使用name为对象起多个名字。

@Configuration
public class AppConfig {
  @Bean(name = "myFoo")
    public Foo foo() {
        return new Foo();
    }   
}

@Configuration
public class AppConfig {
    @Bean(name = { "dataSource", "subsystemA-dataSource", "subsystemB-dataSource" })
    public DataSource dataSource() {
        // instantiate, configure and return DataSource bean...
    }
}

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在 @Component 注解的类中不能定义 类内依赖的@Bean注解的方法。@Configuration可以。
@Configuration
public class AppConfig {

@Bean
public Foo foo() {
    return new Foo(bar());
}

@Bean
public Bar bar() {
    return new Bar();
}

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

猜你喜欢

转载自blog.csdn.net/cg_Amaz1ng/article/details/82419845