对于spring实现bean信息定义目标,spring提供了三种方式:
基于XML
,
基于注解
,以及
基于java类
本人是使用的基于注解的形式比较多的,一直没有使用过基于xml和基于java类的,因此不少地方仍是不会的: java
经过资料,比较了三种方式的在不一样环境的优劣 spring
- 适合于bean实现类来源于第三方类库,如DataSource , JdbcTemplate等,由于如法在类中标注注解,全部经过xml文件进行注解是比较适合的一种方式。
- 另外,命名空间的配置,如aop context 等 只能基于xml配置,,,,
- bean的实现类就在当前项目开发中,能够直接在java类中使用基于注解的配置
- 基于Java类配置的优点在于能够经过代码方式控制bean初始化的整个逻辑,全部若是实例化bean的逻辑比较复杂,则比较适合使用基于Java类配置的方式。。。。。。。
对于三种形式的比较
- 基于xml: 在xml文件中经过<bean>元素定义bean 例如 <bean class="com.boss.test"/>
- 基于注解:经过注解 @Compoent 或者衍型类(@Repository,@Service 以及 @Controller)定义bean
- 基于java类配置:因为使用状况很少,就不作介绍了。。。。。。
- 基于XML 经过<bean> 的id或者name属性定义
- 基于注解: 经过注解的value属性
- 基于XML 经过<property>子元素或者经过p命名空间的动态属性 p:userDao-ref="userDao"
- 基于注解: 经过@Autowired
- 基于xml init-method 和 destroy-method 属性指定bean实现类的方法名,最多只能指定一个初始化方法和一个销毁方法。
- 基于注解: 经过@PostConstruct 和 @PreDestroy 注解来指定初始化或者销毁方法。 能够定义任意多个方法。
- 基于XML scope属性
- 基于注解: @Scope("")
- 基于XML 经过lazy-init 属性指定,默认是default 继承于beans的default-lazy-init设置,该值默认为false
- 基于注解 @Lazy