Java Spring—如何将bean注入到运行时多次创建的类中?
我需要在应用程序启动时初始化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
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时将其传递给构造函数指向我考虑了一下,决定只创建一次处理程序,就像你说的那样。谢谢你。我考虑了一下,决定只创建一次处理程序,就像你说的那样。谢谢