@Bean注解的由来:
因为类似于@Component、@Repository、@Controller、@Service这些注册bean的注解都存在一定的局限性,局限于只能作用于自己编写的类,但是如果是一个jar包的第三方库要加入到IOC容器中的话,这些注解就无能为力了。
为了解决这样的问题,@Bean注解就诞生了。(@Import注解也可以做到这一点,且更方便快捷)。
@Bean注解使用:
@Bean使用在方法上,在方法上使用Bean注解的时候,该方法就会被告知去产生一个bean对象,然后这个bean对象交给spring管理,且这个bean对象的方法在spring的声明周期中默认只会被调用一次。
注意:
@Bean注解和xml文件中的bean标签作用是一模一样的。
@Bean的默认名称是使用方法的名称。
也可以使用name属性自定义名称,name接受一个字符串数组,允许为单个bean使用多个名称。

Bean增强

@Bean注解不提供xml的bean的其他功能
意思是:如果要在bean上配置Scope等的时候,不再使用属性,而是在该bean上使用他们对应的注解

  1. @Bean
  2. @Scope("prototype")
  3. public MyBean myBean() {
  4. // instantiate and configure MyBean obj
  5. return obj;
  6. }

@Bean的使用

@Bean方法通常在@Configuration类中声明。因此,在此模式下,不能将@Configuration类及其工厂方法标记为final或private。在这种情况下,bean方法可以直接调用同一个类中的其他@Bean方法。

  1. @Configuration
  2. public class AppConfig {
  3. @Bean
  4. public FooService fooService() {
  5. return new FooService(fooRepository());
  6. }
  7. @Bean
  8. public FooRepository fooRepository() {
  9. return new JdbcFooRepository(dataSource());
  10. }
  11. // ...
  12. }