首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Spring中单例bean访问非单例bean的第二种模式:ApplicationContextAware

2012-10-19 
Spring中单例bean访问非单例bean的第二种方式:ApplicationContextAware?之前介绍了通过方法注入实现单例be

Spring中单例bean访问非单例bean的第二种方式:ApplicationContextAware

?之前介绍了通过方法注入实现单例bean访问非单例bean 。现在介绍第二种方式,通过实现ApplicationContextAware接口。我们修改一下之前的例子,我们还是修改Service层,我们还是看一下单例调用单例的最基本方式:

/**
?* @author zhu国辉
?*/
package com.zgh.spring.service;

import java.util.List;
import com.zgh.spring.dao.IUserLoginDao;;

public class UserLoginService implements IUserLoginService {
??? private IUserLoginDao userLoginDao;
????
??? public void setUserLoginDao(IUserLoginDao userLoginDao) {
??????? this.userLoginDao = userLoginDao;
??? }

??? public List getUser(String username, String password) {
????????
??????? return userLoginDao.getUser(username, password);
??? }

}

?

配置文件如下:

??? <bean id="userLoginDao" singleton="false">
??????? <property name="sessionFactory">
??????????? <ref local="mySessionFactory"/>
??????? </property>
??? </bean>
????
??? <!--====================Service======================= -->
??? <bean id="userLoginService" class="com.zgh.spring.service.UserLoginService">
??? </bean>

?

我们在DAO里设置singleton="false",然后把Service里的属性注入去掉。再运行一下程序,i每次运行都是1,结果可以看出,我们做的成功了。

DAO层代码如下:

/**
?* @author zhu国辉
?*/
package com.zgh.spring.dao;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
/**
?* 记住一定要引入org.springframework.orm.(hibernate3).support.HibernateDaoSupport
?* 也就是此类的父类.
?* @author zhu国辉
?*
?*/
public class UserLoginDao extends HibernateDaoSupport implements IUserLoginDao {
??? int i=0;
??? public List getUser(String username, String password) {
??????? System.out.println("i="+(++i));
??????? System.out.println(username+":"+password);
??????? List users=getHibernateTemplate().find("from User u where username=? and password=?",new Object[]{username,password});
??????? return users;
??? }

}
顺便说一下ApplicationContextAware接口,此接口定义了一个方法setApplicationContext()方法,此方法在Spring初始化类以后,调用实现了ApplicationContextAware接口的类的setApplicationContext()方法,将自身的一个引用传递给此实例。

我们将这两种单例调用非单例的例子对比一下,不难看出,第一种方式:方法注入要好于第二种方式:实现接口。原因是,第二种方式与Spring绑定了。而第一种方式则没有这种情况,在Service中,我们根本看不出Spring的影子。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ayueiloveyou/archive/2008/08/03/2760659.aspx

热点排行