Spring 发展到现在,已经不是最开始简单的IOC或者 AOP容器了,而如何进行一个自定义Bean的声明和装配,也有了多种方式。简单整理如下:
![922a0c043ba2fbd510ca2f466d4680b9.png](https://i-blog.csdnimg.cn/blog_migrate/2b24451a81b3b6da5729618435dd9ac5.jpeg)
l Spring Framework 2.5 之前,大部分项目还是SSH组合
一般使用 XML 配置,无论是 Bean的声明(注册 | new)还是 Bean的装配一般都要进行对应的XML配置;对大项目来说冗长的XML实在难用。一个典型的例子如下:
public class ExampleBean { public void init() { // do some initialization work } }
l Spring Framework 发展到 3之后,SpringMVC代替了Struts作为主角,这时引入了注解
@Component (@Controller 、@Repository 、@Service)
等注解帮助我们声明一个类, 并使用 @Autowired 进行自动装配。极大的解放了开发者。
同时,推荐基于 JSR-250的注解(@PostConstruct 、 @PreDestroy)进行生命周期管理
声明的例子:
@Component("testBean")public class TestBeanAsComponent { @Autowired private BeanA beanA; @Autowired private BeanB beanB; public BeanA getBeanA() { return beanA; } public BeanB getBeanB() { return beanB; } @Bean public C beanC() { return new C(); }}
l 几乎没过多久,Spring支持了 @Configuration 和 @Bean注解,为声明Bean提供了更大的便利
举例:
@Configurationpublic class AppConfig { @Bean public MessageBuilder messageBuilder() {return new MessageBuilder(); }}
@Component 和 @Bean的比较
两者各有优劣,@Bean 配合 @Configuration ,可以让一些第三方的类也同spring 的生命周期绑定起来。一些复杂的情况,也只能使用@Bean;
@Component,是将整个类作为一个bean的定义,由spring 扫包并管理
@Bean ,是方法级别,一个方法的返回即为一个Bean的定义,方法可以任意组合。
实际项目中,一般是两种混用。