Spring依赖注入范围混乱

时间:2011-02-06 16:10:46

标签: spring dependency-injection

我是Spring DI的新手,我在网络应用程序中第一次使用DI。 似乎我在做错了,它与我使用弹簧范围的方式有关。这是我的问题 我有一个严格的类,我正在注入各种其他对象,以实现所需的功能 这是我的春季文件条目

<bean id="ImportServiceImpl" class="ImportServiceImpl" factory-method="getInstance">
        <property name="browseDirectory" ref="browseDirectoryImpl"/>
        <property name="xmlUnmarshaller" ref="xmlUnmarshallerImpl"/>
        <property name="Adaptar" ref="AdaptarImpl"/>
        <property name="DAOService" ref="DAO"/>
     </bean>

     <bean id="browseDirectoryImpl" class="BrowseDirectoryImpl" factory-method="getInstance" />
     <bean id="xmlUnmarshallerImpl" class="XMLUnmarshallerImpl"/>
     <bean id="AdaptarImpl" class="AdaptarImpl" factory-method="getInstance"/>

现在在我的adaptarImpl类中,我对其他一些在构造函数中初始化的对象有所了解

private AdaptarImpl(){
    foo=new Foo();
}

现在第一次当服务器启动并且这个服务第一次运行时,一切都很好foo正在被启动到其正确的初始化值但是对于所有其他后续调用Spring正在恢复对先前初始化的foo对象的依赖,我希望对于每个新请求,应创建一个新的foo实例。 我觉得在上面的代码factory-method="getInstance"中使用了工厂方法 当被调用的服务器和所有其他后续的calles返回相同的refrence时,我只被调用一次,我希望每个请求都有一个新的实例。 这是我的魔法方法

public static ImportServiceImpl getInstance(){
    return new ImportServiceImpl();
}

我知道我在DI中做了基本错误,但不确定它在哪里。我使用Struts2进行MVC,使用Spring DI进行服务层 这方面的任何帮助都会有所帮助

由于 Umesh制作

2 个答案:

答案 0 :(得分:3)

我不确定我理解你的问题,但听起来你应该要求Spring将对Foo的引用注入到AdapterImpl并使其范围“请求”。如果您需要Spring来控制对象创建,请不要调用“new”。

答案 1 :(得分:0)