Spring帮助咱们管理Bean分为两个部分,一个是注册Bean,一个装配Bean。
完成这两个动做有三种方式,一种是使用自动配置的方式、一种是使用JavaConfig的方式,一种就是使用XML配置的方式。
在自动配置的方式中,使用@Component去告诉Spring,我是一个bean,你要来管理我,而后使用@AutoWired注解去装配Bean(所谓装配,就是管理对象直接的协做关系)。而后在JavaConfig中,@Configuration其实就是告诉spring,spring容器要怎么配置(怎么去注册bean,怎么去处理bean之间的关系(装配))。那么久很好理解了,@Bean的意思就是,我要获取这个bean的时候,你spring要按照这种方式去帮我获取到这个bean。到了使用xml的方式,也是如此。君不见<bean>标签就是告诉spring怎么获取这个bean,各类<ref>就是手动的配置bean之间的关系。spring
用@Bean注解的方法:会实例化、配置并初始化一个新的对象,这个对象会由spring IoC 容器管理。code
@Configuration public class AppConfig { @Bean public MyService myService() { return new MyServiceImpl(); } }
至关于在 XML 文件中配置xml
<beans> <bean id="myService" class="com.acme.services.MyServiceImpl"/> </beans>
生成对象的名字:默认状况下用@Bean注解的方法名做为对象的名字。可是能够用 name属性定义对象的名字.对象
@Configuration public class AppConfig { @Bean(name = "myFoo") public Foo foo() { return new Foo(); } }
并且还能够使用name为对象起多个名字。io
@Configuration public class AppConfig { @Bean(name = { "dataSource", "subsystemA-dataSource", "subsystemB-dataSource" }) public DataSource dataSource() { // instantiate, configure and return DataSource bean... } }
在 @Component 注解的类中不能定义 类内依赖的@Bean注解的方法。@Configuration能够。
@Configuration
public class AppConfig {class
@Bean public Foo foo() { return new Foo(bar()); } @Bean public Bar bar() { return new Bar(); }
}容器