欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring 3.x中三种Bean配置方式比较详解

程序员文章站 2023-12-17 16:33:58
以前java框架基本都采用了xml作为配置文件,但是现在java框架又不约而同地支持基于annotation的“零配置”来代替xml配置文件,struts2、hiberna...

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

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

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

一、 基于xml的配置

<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:标注一个普通的springbean类(可以指定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类配置的方式。

总结

以上就是本文关于spring 3.x中三种bean配置方式比较详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

上一篇:

下一篇: