Spring 注入问题 两个类A, B(普通类, 不是抽象类), 使用Spring进行管理, 现在要将A注入给B, 要求每次访问B的时, B中的A都是一个新创建的对象, 据说使用lookup-method, 可在网上查说, 必须有一个类是抽象类, 不是很理解, 请大家指点, 应该如何配置, 最好能说点原理, 谢谢. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 注入需要接口! 在配置文件中 标签 bean 有属性 ID(接口) 跟 class(名字具体忘了 1年多不接触了 见谅)依赖 运行时 类根据接口名字 在配置文件中找 对应的类 产生1个 实例 Class.forName() bean 的 scope="request" 作用域.@Scope("request")估计是这个 <listener><listener-class>org.springframework.web.context.request.RequestContextListener</listener-class></listener>报错的话要加这个监听器.具体可以去看看手册 spring3的 .2的话 Scope 只有2个属性值.总之查 Scope 这个属性就是了 <bean name="" class="" scope="prototype"> <property name="" ref=""/> </bean>加上红色部分这句花就可以了 spring 注入包括:get和set方法/构造函数;其他的像spring配置方面的查阅文档! 5楼正确,scope="prototype",如果不写的话,每次都是使用同一个对象。 spring默认的注入对象多是单例的,也就是singleton楼主的情况要采用原型,也就是prototype,即设置scope="prototype" 首先感谢各位的回答. 其次请大家看清楚我的问题再回答谢谢.单单是将A的作用域改成"prototype", 能保证每次从ApplicationContext中获得B对象后, B中的A都是一个新的吗? 好像是不行吧. 所以要用lookup-method. 我想知道lookup-method的用法, 期待解答, 谢谢! package research.spring.beanfactory.ch2;public class UserManager { public UserDao getUserDao() {return new UserDao("UserManager.getUserDao()");}public void createUser() {UserDao dao = getUserDao(); //通过getUserDao获得userDao dao.create();}}package research.spring.beanfactory.ch2;import org.springframework.beans.factory.xml.XmlBeanFactory;import org.springframework.core.io.ClassPathResource;public class LookupMethodTest {public static void main(String[] args) {XmlBeanFactory factory=newXmlBeanFactory(new ClassPathResource("research/spring/beanfactory/ch2/context.xml"));UserManager manager=(UserManager) factory.getBean("userManager");manager.createUser(); //create a User }}xml version="1.0" encoding="UTF-8"?>DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd"><beans><bean name="userManager"class="research.spring.beanfactory.ch2.UserManager"><lookup-method name="getUserDao" bean="userDao" />bean><bean name="userDao" class="research.spring.beanfactory.ch2.UserDao" ><constructor-arg><value>lookup methodvalue>constructor-arg>bean><bean name="userDaoFactory" class="research.spring.beanfactory.ch2.UserDaoFactory">bean>beans> <bean id="loginAction" class="com.jungle.action.LoginAction" scope="prototype"> <property name="userDaoImpl" ref="userDaoImpl"></property> </bean> <bean id="userDaoImpl" class="com.jungle.UserDaoImpl" scope="prototype"/>spring中的bean默认为单例 像dataSource这种东西是只需要一个的 就可以交给Spring来管理按你说的 要求每次访问B的时, B中的A都是一个新创建的对象那么A和B都要设置为 prototype 我试过了,如果只有一个是prototype 是不行的package com.jungle.action;import com.jungle.UserDaoImpl;import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport { private UserDaoImpl userDaoImpl; //最好为接口 @Override public String execute() throws Exception { System.out.println(userDaoImpl); return super.execute(); } public UserDaoImpl getUserDaoImpl() { return userDaoImpl; } public void setUserDaoImpl(UserDaoImpl userDaoImpl) { this.userDaoImpl = userDaoImpl; }}struts2.xml<package name="login" extends="struts-default" namespace="/login"> <action name="Login" class="loginAction"> </action> </package> CommonUpload上传文件为什么总是在根目录 structs2.0中遇到的问题 怎么解决MyEclipse + hibernate中的异常 多线程的问题 如何直接把XML文件放在soap body里 classpath的最简单问题 急救:明天去华为面试,请问谁有那边的面试题目呀?麻烦贴出来看一下。 会话BEAN如何调用实体BEAN 如何将一个表中的多条数据通过EJB显示在JSP页面上? 求助大佬!! 关于JDBC连接MSSQL2000 的报错 使用spring出现的诡异问题,求真相
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
报错的话要加这个监听器.具体可以去看看手册 spring3的 .2的话 Scope 只有2个属性值.总之查 Scope 这个属性就是了
</bean>
加上红色部分这句花就可以了
public class UserManager {
public UserDao getUserDao() {
return new UserDao("UserManager.getUserDao()");
}
public void createUser() {
UserDao dao = getUserDao(); //通过getUserDao获得userDao
dao.create();
}
}
package research.spring.beanfactory.ch2;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
public class LookupMethodTest {
public static void main(String[] args) {
XmlBeanFactory factory=new
XmlBeanFactory(new ClassPathResource("research/spring/beanfactory/ch2/context.xml"));
UserManager manager=(UserManager) factory.getBean("userManager");
manager.createUser(); //create a User }
}
xml version="1.0" encoding="UTF-8"?>
DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean name="userManager"
class="research.spring.beanfactory.ch2.UserManager">
<lookup-method name="getUserDao" bean="userDao" />
bean>
<bean name="userDao" class="research.spring.beanfactory.ch2.UserDao" >
<constructor-arg>
<value>lookup methodvalue>
constructor-arg>
bean>
<bean name="userDaoFactory" class="research.spring.beanfactory.ch2.UserDaoFactory">
bean>
beans>
<bean id="loginAction" class="com.jungle.action.LoginAction" scope="prototype">
<property name="userDaoImpl" ref="userDaoImpl"></property>
</bean>
<bean id="userDaoImpl" class="com.jungle.UserDaoImpl" scope="prototype"/>
spring中的bean默认为单例 像dataSource这种东西是只需要一个的 就可以交给Spring来管理按你说的 要求每次访问B的时, B中的A都是一个新创建的对象那么A和B都要设置为 prototype 我试过了,如果只有一个是prototype 是不行的package com.jungle.action;import com.jungle.UserDaoImpl;
import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport {
private UserDaoImpl userDaoImpl; //最好为接口 @Override
public String execute() throws Exception {
System.out.println(userDaoImpl);
return super.execute();
} public UserDaoImpl getUserDaoImpl() {
return userDaoImpl;
} public void setUserDaoImpl(UserDaoImpl userDaoImpl) {
this.userDaoImpl = userDaoImpl;
}}struts2.xml<package name="login" extends="struts-default" namespace="/login">
<action name="Login" class="loginAction">
</action>
</package>