两个类A, B(普通类, 不是抽象类), 使用Spring进行管理, 现在要将A注入给B, 要求每次访问B的时, B中的A都是一个新创建的对象, 据说使用lookup-method, 可在网上查说, 必须有一个类是抽象类, 不是很理解, 请大家指点, 应该如何配置, 
最好能说点原理, 谢谢.

解决方案 »

  1.   

    注入需要接口!    在配置文件中  标签 bean 有属性  ID(接口) 跟 class(名字具体忘了 1年多不接触了 见谅)依赖   运行时  类根据接口名字 在配置文件中找 对应的类 产生1个 实例   Class.forName()
      

  2.   

    bean 的 scope="request" 作用域.@Scope("request")估计是这个
      

  3.   

    <listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>
    报错的话要加这个监听器.具体可以去看看手册 spring3的 .2的话 Scope 只有2个属性值.总之查 Scope 这个属性就是了
      

  4.   

     <bean name="" class="" scope="prototype">  <property name="" ref=""/> 
       </bean>
    加上红色部分这句花就可以了
      

  5.   

    spring 注入包括:get和set方法/构造函数;其他的像spring配置方面的查阅文档!
      

  6.   

    5楼正确,scope="prototype",如果不写的话,每次都是使用同一个对象。
      

  7.   

    spring默认的注入对象多是单例的,也就是singleton楼主的情况要采用原型,也就是prototype,即设置scope="prototype"
      

  8.   

    首先感谢各位的回答. 其次请大家看清楚我的问题再回答谢谢.单单是将A的作用域改成"prototype", 能保证每次从ApplicationContext中获得B对象后, B中的A都是一个新的吗? 好像是不行吧.  所以要用lookup-method.  我想知道lookup-method的用法, 期待解答, 谢谢!
      

  9.   

    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=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>
      

  10.   


    <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>