【发布时间】:2013-09-15 17:57:15
【问题描述】:
所以我看到了这个问题:
Spring dependency injection to other instance
想知道我的方法是否可行。
1) 在我的 Spring 应用程序上下文中声明 bean
<bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="initialSize" value="${jdbc.initialSize}" />
<property name="validationQuery" value="${jdbc.validationQuery}" />
<property name="testOnBorrow" value="${jdbc.testOnBorrow}" />
</bean>
<bean id="apiData" class="com.mydomain.api.data.ApiData">
<property name="dataSource" ref="dataSource" />
<property name="apiLogger" ref="apiLogger" />
</bean>
<bean id="apiLogging" class="com.mydomain.api.data.ApiLogger">
<property name="dataSource" ref="dataSource" />
</bean>
2) 覆盖我的 servlet 的 init 方法,如图所示:
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
this.apiData = (ApiData)ac.getBean("apiData");
this.apiLogger = (ApiLogger)ac.getBean("apiLogger");
}
在 Web 应用程序部署的这一点上,这是否可行,或者 Spring 是否还没有准备好将 bean 交付给我的 servlet?我是否必须做一些更传统的事情,比如将豆子放入web.xml?
【问题讨论】:
-
您是否有理由不使用上下文参数和初始化侦听器?从那里您可以从 ServletContext 中查找 ApplicationContext。
-
@bh5k 我正在处理一些实际上具有自定义 servlet 的遗留代码。我以前没有和他们合作过,所以与他们有关的任何事情对我来说都有点陌生。通常我非常依赖 Spring 库来完成所有这些幕后工作。
-
你应该仍然可以这样做:stackoverflow.com/questions/6451377/…
-
使用 Context-Listener 加载上下文,然后在 servlet 中查找。
-
这应该正是你想要做的:stackoverflow.com/questions/6414373/…
标签: java spring servlets dependency-injection