1、@Bean 是方法级注释和XML 争犸禀淫<bean/> 元素的直接模拟。注释支持一些提供的属性 <bean/> ,例如:*init-method * destroy-method * autowiring * name 。您可以在带 @Bean 注释的类 @Configuration 或带 注释的类中使用注释 @Component
2、要声明bean,可以使用注释注释方法 @Bean 。您可以使用此方法在 ApplicationContext 指定为方法的返回值的类型中注册bean定义。默认情况下,bean名称与方法名称相同。以下示例显示了@Bean 方法声明:
3、上述配置与以下Spring XML完全等效:
4、这两个声明都将一个名为 transferService available 的bean命名为 ApplicationContext 绑定到类型的对象实例, TransferServiceImpl 如下图所示:
5、您还可以 使用@Bean接口(或基类)返回类型声明您的方法,如以下示例所示:
6、但是,这会将高级类型预测的可见性限制为指定的接口类型( TransferService )。然后,TransferServiceImpl 只使用容器已知的完整类型()一次,就会实例化受影响的单例bean。
7、非延迟单例bean根据其声明顺碌食撞搁序进行实例化,因此您可能会看到不同的类型匹配结果,具体取决于另一个组件何时尝试通过非声明类型进行匹趺谄菇明配(例如 @Autowired TransferServiceImpl ,只有transferService 在实例化bean之后才会解析)。