Bean不同配置方式比较


1.基于XML配置

定义:在XML文件中通过<bean>元素定义Bean,例如<bean class="com.bbt.UserDao"/>
名称:通过<bean>的id或name属性定义,例如:<bean id="userDao" class="com.bbt.UserDao">默认名称为com.bbt.UserDao#0
注入:通过<property>子元素或通过p命名空间的动态属性,如p:userDao-ref="userDao"进行注入
生命过程方法:通过<bean>的init-method和destroy-method属性指定Bean实现类的方法名,最多只能指定一个初始化和一个销毁方法
作用范围:通过<bean>的scope属性指定,如<bean class="com.bbt.UserDao" scope="prototype">
延迟初始化:通过<bean>的lazy-init属性指定,默认为default,继承与<beans>的default-lazy-init设置,该值默认为false

2.基于注解配置

定义:在Bean实现类处通过标注@Component或衍型类(@Repository  @Service  @Controller)定义Bean
名称:通过注解的value属性定义,如@Component("userDao")默认名称为小写字母打头的类名(不带包名)userDao
注入:通过在成员变量或方法入参处标注@Autowired,按类型匹配自动注入。还可以配合使用@Qualifier按名称匹配方式注入
生命过程方法:通过在目标方法上标注@PostConstruct和@PreDestroy注解指定初始化或销毁方法,可以定义任意多个方法
作用范围:通过在类定义处标注@Scope指定。如@Scope("prototype")
延迟初始化:通过在类定义处标注@lazy指定,如@Lazy(true)

3.基于Java类配置

定义:在标注了@Configuration的java类中,通过在类方法上标注@Bean定义一个Bean,方法必须提供Bean的实例化逻辑
名称:通过@Bean的name属性定义,如@Bean("userDao")默认名称为方法名
注入:比较灵活,可以在方法处通过@Autowired使方法入参绑定bean,然后在方法中通过代码进行注入,还可以通过调用配置类的@Bean方法进行注入
生命周期方法:通过@Bean的initMethod或destoryMethod指定一个初始化或销毁方法。对于初始化方法来说,可以直接在方法内部通过代码的方式灵活初始化逻辑
作用范围:通过在Bean方法定义处标注@Scope指定
延迟初始化:通过在Bean方法定义处标注@Lazy指定

Bean不同配置方式的适用场合

基于XML配置:Bean实现类来源于第三方类库,如DataSource,JdbcTemplate等,因无法在类中标注注解,通过XML配置方式较好。命名空间的配置,如aop  context等,只能采用基于XML的配置
基于注解配置:Bean的实现类是当前项目开发的,可以直接在Java类中基于注解的配置
基于Java类配置:基于Java类配置的优势在于可以通过代码控制Bean初始化的整体逻辑。所以如果实例化Bean的逻辑比较复杂,则比较适合用基于Java类配置的方式

【Spring3.0系列】---Bean不同配置方式比较 和适用场合的更多相关文章

  1. springmvc学习指南 之---第25篇 Spring Bean有三种配置方式

    writed by不要张艳涛, 从tomcat转到了springmvc 现在开始有点不知道该看什么书了,看完了springmvc 学习指南之后 又查了一些书,好多都是内容相近,在找书的过程之中,发现s ...

  2. Bean不同配置方式比较

      基于XML配置 基于注解配置 基于Java类配置 Bean定义 在XML文件中通过<bean>元素定义Bean,如:<bean class="com.bbt.UserD ...

  3. Spring框架(2)---IOC装配Bean(xml配置方式)

    IOC装配Bean (1)Spring框架Bean实例化的方式提供了三种方式实例化Bean 构造方法实例化(默认无参数,用的最多) 静态工厂实例化 实例工厂实例化 下面先写这三种方法的applicat ...

  4. Spring之Bean的配置方式

    在博客中为了演示容器Bean实例化时暴露出的几个接口,将UserBean配置在XML中,其实常见的Bean的配置有3种.1.基于xml配置Bean 2.使用注解定义Bean 3.基于java类提供Be ...

  5. Bean不同配置方式的比较

    在<Spring3.x 企业应用开发实战>上学习了Bean的三种不同配置方法,下图是我从书中截取的图片,比较了一下这三种配置的异同 ps:发现图片不能完全显示(右侧有一块不显示),解决方法 ...

  6. Entity Framework 5.0系列之约定配置

    Code First之所以能够让开发人员以一种更加高效.灵活的方式进行数据操作有一个重要的原因在于它的约定配置.现在软件开发越来复杂,大家也都试图将软件设计的越来越灵活,很多内容我们都希望是可配置的, ...

  7. 【转】Entity Framework 5.0系列之约定配置

    Code First之所以能够让开发人员以一种更加高效.灵活的方式进行数据操作有一个重要的原因在于它的约定配置.现在软件开发越来复杂,大家也都试图将软件设计的越来越灵活,很多内容我们都希望是可配置的, ...

  8. Spring3.2 中 Bean 定义之基于 XML 配置方式的源码解析

    Spring3.2 中 Bean 定义之基于 XML 配置方式的源码解析 本文简要介绍了基于 Spring 的 web project 的启动流程,详细分析了 Spring 框架将开发人员基于 XML ...

  9. spring Bean的三种配置方式

    Spring Bean有三种配置方式: 传统的XML配置方式 基于注解的配置 基于类的Java Config 添加spring的maven repository <dependency> ...

随机推荐

  1. tar 解压出错

    今天下载了一个Linux内核文件,解压的时候出现了这样的错误: gzip: stdin: unexpected end of file tar: Unexpected EOF in archive t ...

  2. 欲哭无泪的@Autowired注入对象为NULL

    欲哭无泪啊...一下午的时间就这么被浪费了...一个基于spring mvc和spring data jpa的小项目,当我写完一个controller的测试用例后,一运行却报空指针,跟了下是一个dao ...

  3. cloudera cdh native lib

    如果通过命令行的方式安装cloudera 版本的hadoop,下载它的cdh版本. 解压后执行,你会发现报warning,没有native的库,lib/native是空的. 如何获取native的文件 ...

  4. POJ3107Godfather[树形DP 树的重心]

    Godfather Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6121   Accepted: 2164 Descrip ...

  5. Guava中Predicate的常见用法

    Guava中Predicate的常见用法 1.  Predicate基本用法 guava提供了许多利用Functions和Predicates来操作Collections的工具,一般在 Iterabl ...

  6. hibernate之关联映射

    No.1 映射一对多双向关联关系: 当类与类之间建立了关联,就可以方便的从一个对象导航到另一个或另一组与它关联的对象. 步骤一: 注意:hibernate要求在持久化类中定义集合类属性时,必须把属性类 ...

  7. java 24 - 4 GUI之创建数据转移窗口

    需求: 把文本框中的数据,通过点击按钮,转移到文本域中.  同时清空文本框中的数据 代码:(步骤都注释了) public class FrameDemo4 { public static void m ...

  8. NOIP1999 旅行家的预算

    题目描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿 ...

  9. 适配ipone5

    PROJECT和TARGETS都需要设置

  10. 036医疗项目-模块三:药品供应商目录模块——供货商药品目录(批量)添加药品的功能---------Action层

    这篇文章我们来讲Action层: 我们先讲开发步骤: 1:我们要根据Service层里面要传的参数,在Action层传入对应的参数. Service层是:public void insertGysym ...