Java 如何将Springbean注入到ApacheCommons池类流中反射生成的类中
我正在使用SpringMVC3.2.4和ApacheCommonsPooling2.3来管理到SOAP服务的连接。我正在使用的一个功能是GenericObjectPool类中的“空闲对象逐出”线程功能: 使用此功能,我指定用于测试退出连接对象的类的名称: 检查GenericObjectPool类的Commons池实现后,使用反射实例化并执行逐出类。所有将SpringBean注入此类的尝试都失败了,包括在生成的类上使用诸如使用@EnableLoadTimeWeaving和@Configurable的加载时编织等常见技术 是否可以将SpringBean注入到由反射在内部生成且不由Spring容器管理的类中? 编辑: 下面是实例化驱逐器类的方法:Java 如何将Springbean注入到ApacheCommons池类流中反射生成的类中,java,spring,spring-mvc,apache-commons-pool,Java,Spring,Spring Mvc,Apache Commons Pool,我正在使用SpringMVC3.2.4和ApacheCommonsPooling2.3来管理到SOAP服务的连接。我正在使用的一个功能是GenericObjectPool类中的“空闲对象逐出”线程功能: 使用此功能,我指定用于测试退出连接对象的类的名称: 检查GenericObjectPool类的Commons池实现后,使用反射实例化并执行逐出类。所有将SpringBean注入此类的尝试都失败了,包括在生成的类上使用诸如使用@EnableLoadTimeWeaving和@Configurab
...
public final void setEvictionPolicyClassName(
String evictionPolicyClassName) {
try {
Class<?> clazz = Class.forName(evictionPolicyClassName);
Object policy = clazz.newInstance();
if (policy instanceof EvictionPolicy<?>) {
@SuppressWarnings("unchecked") // safe, because we just checked the class
EvictionPolicy<T> evicPolicy = (EvictionPolicy<T>) policy;
this.evictionPolicy = evicPolicy;
}
} catch (ClassNotFoundException e) {
...
下面是ReceivingPolicy类的实现示例:
class SampleEvictionPolicy implements EvictionPolicy<SabreConnection> {
// This is what I would like to add:
// @Autowired
// private desiredBeans desiredBeans
public SampleEvictionPolicy() { }
@Override
boolean evict(EvictionConfig evictionConfig, PooledObject<SabreConnection> tPooledObject, int i) {
// Do some stuff
}
class SampleReceivingPolicy实现了ReceivingPolicy{
//我想补充一点:
//@自动连线
//私人愿望豆愿望豆
公共SampleReceivingPolicy(){}
@凌驾
布尔逐出(逐出配置逐出配置,池对象TPooleObject,int i){
//做点什么
}
如果我理解正确,您在用Springbean“桥接”非spring类时会遇到问题。如果我理解正确,检查的实例化和执行将不受您的控制(请参见那里的final
方法)。因此我的建议很简单(尽管不是很好):
你能分享一些代码吗?这实际上是我在考虑选项时的第一个想法,但我需要访问整个应用程序中共享的、由Spring管理的类。我要么创建重复的类,要么将所有内容转换为非Spring管理的bean,这都不是一个很好的选项。因此,我现在所做的就是引用将spring管理的bean转换为execution类,效果很好。我建议对Apache Commons进行更改,以允许将execution类作为引用传递,从而允许对其进行spring管理。我不确定为什么现在不是这样,但我会尝试找出原因。
class SampleEvictionPolicy implements EvictionPolicy<SabreConnection> {
// This is what I would like to add:
// @Autowired
// private desiredBeans desiredBeans
public SampleEvictionPolicy() { }
@Override
boolean evict(EvictionConfig evictionConfig, PooledObject<SabreConnection> tPooledObject, int i) {
// Do some stuff
}