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