开发者社区> 弗兰克的猫> 正文

【转】Spring 中三种Bean配置方式比较

简介:   今天被问到Spring中Bean的配置方式,很尴尬,只想到了基于XML的配置方式,其他的一时想不起来了,看来Spring的内容还没有完全梳理清楚,见到一篇不错的文章,就先转过来了。   以前Java框架基本都采用了XML作为配置文件,但是现在Java框架又不约而同地支持基于Annotation的“零配置”来代替XML配置文件,Struts2、Hibernate、Spring都开始使用Annotation来代替XML配置文件了;而在Spring 3.x提供了三种选择,分别是:基于XML的配置、基于注解的配置和基于Java类的配置。
+关注继续查看

  今天被问到Spring中Bean的配置方式,很尴尬,只想到了基于XML的配置方式,其他的一时想不起来了,看来Spring的内容还没有完全梳理清楚,见到一篇不错的文章,就先转过来了。

  以前Java框架基本都采用了XML作为配置文件,但是现在Java框架又不约而同地支持基于Annotation的“零配置”来代替XML配置文件,Struts2、Hibernate、Spring都开始使用Annotation来代替XML配置文件了;而在Spring 3.x提供了三种选择,分别是:基于XML的配置、基于注解的配置和基于Java类的配置。

  下面分别介绍下这三种配置方式;首先定义一个用于举例的JavaBean。

package  com.chinalife.dao   
public class LoginUserDao {   
    ……   
    // 用于设置初始化方法   
    public void myInit() {   
  
    }   
  
    // 用于设置销毁方法   
    public void myDestroy() {   
    }   
}  

一、   基于XML的配置

  1. <bean id=“loginUserDao” class=“com.chinalife.dao.impl.LoginUserDaoImpl”  
            lazy-init=“true” init-method=“myInit” destroy-method=“myDestroy”  
            scope=“prototype”>  
            ……   
    </bean>

在XML配置中,通过<bean> </bean>来定义Bean,通过id或name属性定义Bean的名称,如果未指定id和name属性,Spring则自动将全限定类名作为Bean的名称。通过<property>子元素或者p命名空间的动态属性为Bean注入值。还可以通过<bean>的init-method和destory-method属性指定Bean实现类的方法名来设置生命过程方法(最多指定一个初始化方法和销毁方法)。通过<bean>的scope指定Bean的作用范围。听过<bean>的lazy-init属性指定是否延迟初始化。

当Bean的实现类来源于第三方类库,比如DataSource、HibernateTemplate等,无法在类中标注注解信息,只能通过XML进行配置;而且命名空间的配置,比如aop、context等,也只能采用基于XML的配置。

 

二、   基于注解的配置

@Scope(“prototype”)   
@Lazy(true)   
@Component(“loginUserDao”)   
public class LoginUserDao {   
    ……   
    // 用于设置初始化方法   
    @PostConstruct  
    public void myInit() {   
  
    }   
  
    // 用于设置销毁方法   
    @PreDestroy  
    public void myDestroy() {   
    }   
}   

在Bean实现类中通过一些Annotation来标注Bean类:

·@Component:标注一个普通的Spring Bean类(可以指定Bean名称,未指定时默认为小写字母开头的类名)

·@Controller:标注一个控制器类

·@Service:标注一个业务逻辑类

·@Repository:标注一个DAO类

通过在成员变量或者方法入参处标注@Autowired按类型匹配注入,也可以使用@Qualifier按名称配置注入。通过在方法上标注@PostConstrut和PreDestroy注解指定的初始化方法和销毁方法(可以定义任意多个)。通过@Scope(“prototype”)指定Bean的作用范围。通过在类定义处标注@Lazy(true)指定Bean的延迟加载。

当Bean的实现类是当前项目开发的,可以直接在Java类中使用基于注解的配置,配置比较简单。

 

三、基于Java类配置

 

@Configuration  
public class Conf {   
    @Scope(“prototype”)   
    @Bean(“loginUserDao”)   
    public LoginUserDao loginUserDao() {   
        return new LoginUserDao();   
    }   
}   
 

在标注了@Configuration的java类中,通过在类方法标注@Bean定义一个Bean。方法必须提供Bean的实例化逻辑。通过@Bean的name属性可以定义Bean的名称,未指定时默认名称为方法名。在方法处通过@Autowired使方法入参绑定Bean,然后在方法中通过代码进行注入;也可以调用配置类的@Bean方法进行注入。通过@Bean的initMethod或destroyMethod指定一个初始化或者销毁方法。通过Bean方法定义处标注@Scope指定Bean的作用范围。通过在Bean方法定义处标注@Lazy指定Bean的延迟初始化。

当实例化Bean的逻辑比较复杂时,则比较适合基于Java类配置的方式。

来源:http://www.javawxs.com/?p=561

真正重要的东西,用眼睛是看不见的。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《Spring 手撸专栏》第 15 章:万人之敌,通过注解给属性注入配置和Bean对象
实现 1. 工程结构 2. 把读取到属性填充到容器 3. 自定义属性注入注解 4. 扫描自定义注解 5. 在Bean的生命周期中调用属性注入 测试 1. 事先准备 2. 属性配置文件 3. 单元测试
51 0
《Spring 手撸专栏》第 14 章:笑傲江湖,通过注解配置和包自动扫描的方式完成Bean对象的注册
实现 1. 工程结构 2. 处理占位符配置 3. 定义拦截注解 4. 处理对象扫描装配 5. 解析xml中调用扫描 测试 1. 事先准备 2. 属性配置文件 3. spring.xml 配置对象 4. 单元测试(占位符) 5. 单元测试(包扫描)
30 0
Netbeans配置Java SE嵌入式平台(树莓派)
  1.配置平台    来源:http://www.cnblogs.com/xiaobo-Linux/p/7955769.html 2. 选择远程     3. 填写信息 JRE 路径是树莓派上的路径:how? sudo update-alternatives --displ...
1254 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
18130 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
24852 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
19872 0
jsp JavaBean配置
JavaBean配置1 编写Bean可以放到自己的包中。如:SelfBean/SelfBean.java完全目录为:虚拟目录/WEB-INF/classes/SelfBean/SelfBean.java2 编译目录情况为:虚拟目录/WEB-INF/classes/SelfBean/SelfBean.
522 0
+关注
弗兰克的猫
真正重要的东西,用眼睛是看不见的。
67
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载