Spring Lookup方法注入因AbstractMethodError而失败

时间:2015-05-20 11:25:46

标签: spring dependency-injection

我有一个像下面这样的单件服务类。

 @Service
 public class SingletonClass{

 @Autowired
 private ContextProvider provider;

 public Context run(){
 context = provider.createContext();
 updateContext(context)
}

ContextProvider类:

 public abstract class ContextProvider implements MyInterface{
        public abstract Context createContext(); 
}

配置:

<bean name="provider"
        class="xyz.s.s.ContextProvider" >

        <lookup-method name="createContext"
            bean="someBean" />
</bean>
<bean id="somebean" class="com.x.y.someclass" />
<bean id="singletonService" class="com.x.y.SingletonClass" />

当我尝试使用Junit运行上述操作 - &gt;而不是按需创建查找bean时,我收到以下错误

org.springframework.beans.factory.BeanCreationException: aused by:java.lang.AbstractMethodError     在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1585)     在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553)     在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)

看来,查找方法注入在我的情况下不起作用

1 个答案:

答案 0 :(得分:0)

我找到了问题并修复了它。

我让抽象类实现了一个接口。所以在运行时,CGLIB无法创建代理类,因为有未实现的方法。

编译器也没有抱怨,因为这是抽象类,并没有指望我们添加接口的所有实现。

我删除了&#39;工具&#39;它运作正常。

所以contextprovider将成为

public abstract class ContextProvider {
        public abstract Context createContext(); 
}

发布此消息,因为人们可能面临同样的情况。