Java Spring—如何将bean注入到运行时多次创建的类中?

Java Spring—如何将bean注入到运行时多次创建的类中?,java,spring,dependency-injection,Java,Spring,Dependency Injection,我需要在应用程序启动时初始化bean,所以我在applicationContext.xml中进行了初始化。但现在我需要将该bean注入到运行时创建的对象中。例如: Servlet ... void doPost(...) { new Handler(request); } ... Handler public class Handler { ProfileManager pm; // I need to inject this ??? Handler(Reques

我需要在应用程序启动时初始化bean,所以我在
applicationContext.xml
中进行了初始化。但现在我需要将该bean注入到运行时创建的对象中。例如:

Servlet

...
void doPost(...) {
    new Handler(request); 
}
...
Handler

public class Handler {

    ProfileManager pm; // I need to inject this ???

    Handler(Request request) {
        handleRequest(request);
    }

    void handleRequest(Request request) {
        pm.getProfile(); // example
    }
}

Handler
ProfileManager
声明为Springbean,延迟初始化它们。并注入它们。不要使用
newhandler()
让Spring这样做将
Handler
ProfileManager
声明为Springbean,惰性地初始化它们。不要使用
newhandler()
让Spring这样做首先,我想知道为什么“Handler”会被反复初始化。在本例中,使用bean并在运行时多次调用方法似乎同样好


除此之外,您还可以使用本身就是bean的方面。在那里注入ProfileManager,让方面创建处理程序,设置pm。

首先,我想知道为什么“处理程序”会一次又一次地初始化。在本例中,使用bean并在运行时多次调用方法似乎同样好


除此之外,您还可以使用本身就是bean的方面。在那里注入ProfileManager,让方面在创建处理程序时工作,设置pm.

更好的方法是将处理程序声明为Bean(假设已经声明了ProfileManager),然后在处理程序Bean中使用注释@Autowired(如果在应用程序中使用注释)自动连接ProfileManager,或者在applicationContext.xml内部自动连接。 如何在xml中执行此操作的示例可以是:

<bean id="profileManager" class="pckg.ProfileManager" />
<bean id="handler" class="pckg.Handler" >
 <property name="pm" ref="profileManager" />
</bean>


如果您不想将处理程序注册为bean,请像这样实例化它,并从spring的ApplicationContext获取pm实例。如何在web应用程序中获取ApplicationContext的一种方法如下所示

更好的方法是将处理程序声明为Bean(假设已声明ProfileManager),然后在处理程序Bean中自动连接ProfileManager,如果在应用程序中使用注释,则使用注释@Autowired,或者在applicationContext.xml中。 如何在xml中执行此操作的示例可以是:

<bean id="profileManager" class="pckg.ProfileManager" />
<bean id="handler" class="pckg.Handler" >
 <property name="pm" ref="profileManager" />
</bean>


如果您不想将处理程序注册为bean,请像这样实例化它,并从spring的ApplicationContext获取pm实例。如何在web应用程序中获取ApplicationContext的一种方法如下所示

我同意其他答案,即您确实应该让Spring处理
处理程序
的创建,但如果这不是一个选项,那么您可以将
ProfileManager
插入
Servlet
中,然后在创建时将其传递到构造函数中创建
Handler

我同意其他答案,即您确实应该让Spring来处理
Handler
的创建,但如果这不是一个选项,那么您可以将
ProfileManager
注入
Servlet
中,然后在创建
Handler

时将其传递给构造函数指向我考虑了一下,决定只创建一次处理程序,就像你说的那样。谢谢你。我考虑了一下,决定只创建一次处理程序,就像你说的那样。谢谢