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

 更新时间:2017年12月28日 08:37:51   作者:iloveyin  
这篇文章主要介绍了Spring 3.x中三种Bean配置方式比较详解,具有一定借鉴价值,需要的朋友可以参考下

以前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配置方式比较详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

相关文章

  • Ubuntu16.04安装部署solr7的图文详细教程

    Ubuntu16.04安装部署solr7的图文详细教程

    这篇文章主要为大家详细介绍了Ubuntu16.04安装部署solr7的图文详细教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • shade解决mybatis包冲突问题

    shade解决mybatis包冲突问题

    这篇文章主要介绍了shade解决mybatis包冲突问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • 浅析Jmeter多用户token使用问题

    浅析Jmeter多用户token使用问题

    这篇文章主要介绍了Jmeter多用户token使用问题,通过具体的例子给大家介绍了Jmeter多用户token使用场景接口分析,需要的朋友可以参考下
    2021-10-10
  • Spring Boot统一接口返回及全局异常处理

    Spring Boot统一接口返回及全局异常处理

    这篇文章主要介绍了Spring Boot统一接口返回及全局异常处理,文章围绕主题展开相关资料,具有一定的参考价值需要的小伙伴可以参考一下
    2022-04-04
  • dubbo扩展点AOP切面功能扩展示例详解

    dubbo扩展点AOP切面功能扩展示例详解

    这篇文章主要为大家介绍了dubbo扩展点AOP切面功能扩展示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • mybatis plus开发过程中遇到的问题记录及解决

    mybatis plus开发过程中遇到的问题记录及解决

    这篇文章主要介绍了mybatis plus开发过程中遇到的问题记录及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 使用JDBC工具类实现简单的登录管理系统

    使用JDBC工具类实现简单的登录管理系统

    这篇文章主要为大家详细介绍了使用JDBC工具类实现简单的登录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Java多线程之死锁详解

    Java多线程之死锁详解

    这篇文章主要介绍了Java多线程的死锁,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-10-10
  • springmvc+spring+mybatis实现用户登录功能(上)

    springmvc+spring+mybatis实现用户登录功能(上)

    这篇文章主要为大家详细介绍了springmvc+spring+mybatis实现用户登录功能,比较基础的学习教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 浅析Java集合及LIst接口

    浅析Java集合及LIst接口

    这篇文章主要介绍了Java集合及LIst接口,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03

最新评论