首页 > 代码库 > 当singleton Bean依赖propotype Bean,可以使用在配置Bean添加look-method来解决

当singleton Bean依赖propotype Bean,可以使用在配置Bean添加look-method来解决

在Spring里面,当一个singleton bean依赖一个prototype bean,因为singleton bean是单例的,因此prototype bean在singleton bean里面也会变成单例.

这个怎么解决呢???可以使用Spring提供的lookup-method来注入。

举例说明:先列出相关类:代码中的说明足够说明问题。user类:prototype bean

package com.cn.pojo;import java.io.Serializable;public class User implements Serializable{	/**	 * 	 */	private static final long serialVersionUID = 1L;		private int userId;	private String userName;	private String userPwd;	private String userInfo;	public int getUserId() {		return userId;	}	public void setUserId(int userId) {		this.userId = userId;	}	public String getUserName() {		return userName;	}	public void setUserName(String userName) {		this.userName = userName;	}	public String getUserPwd() {		return userPwd;	}	public void setUserPwd(String userPwd) {		this.userPwd = userPwd;	}	public String getUserInfo() {		return userInfo;	}	public void setUserInfo(String userInfo) {		this.userInfo = userInfo;	}     	}

 LookupMethod类:singleton bean

package com.cn.springTest;import com.cn.pojo.User;/** * LookupMethod为singleton,user为propotype * 当singleton Bean依赖propotype Bean,可以使用在配置Bean添加look-method来解决 * @author Administrator * */public class LookupMethod {		private User user;		public User getUser() {			return user;		}		public void setUser(User user) {			this.user = user;		}		}

核心配置文件:

<!-- user userbean -->	<bean id ="user" class="com.cn.pojo.User" scope="prototype">	   <property name="userId" value="http://www.mamicode.com/1" />	   <property name="userName" value="http://www.mamicode.com/userName" />	   <property name="userPwd" value="http://www.mamicode.com/userPwd" />	   <property name="userInfo" value="http://www.mamicode.com/userInfo" />	</bean>		<!-- lookupMethod  LookupMethod为单例,user为原型的获取实例-->	<bean id ="lookupMethod" class="com.cn.springTest.LookupMethod">		<!-- <property name="user" ref="user"/> -->  <!-- 这种写法会将user当着单例来获取-->	    <lookup-method name="getUser" bean="user"/><!--lookup-method方式会将user当着原型来获取-->	</bean>

 

测试类:SpringLookupMethod

import com.cn.util.SpringContextUtil;public class SpringLookupMethod {	public static void main(String[] args) {		ApplicationContext actx = new ClassPathXmlApplicationContext("ApplicationContext.xml");		actx.getBean("springContextUtil");		LookupMethod lookupMethod = (LookupMethod) SpringContextUtil.getBean("lookupMethod");		System.out.println(lookupMethod);		LookupMethod lookupMethod1 = (LookupMethod) SpringContextUtil.getBean("lookupMethod");		System.out.println(lookupMethod1);		System.out.println(lookupMethod.getUser());		System.out.println(lookupMethod1.getUser());		System.out.println(lookupMethod.getUser());		System.out.println(lookupMethod1.getUser());	}}

 

这样的测试足够说明问题。

 

当singleton Bean依赖propotype Bean,可以使用在配置Bean添加look-method来解决