【问题标题】:Spring Lookup Method Injection failing with AbstractMethodErrorSpring 查找方法注入失败并出现 AbstractMethodError
【发布时间】:2015-05-20 11:25:45
【问题描述】:

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

 @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 运行上述内容时 ->而不是按需创建查找 bean,我收到以下错误

org.springframework.beans.factory.BeanCreationException: 使用者: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)

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

【问题讨论】:

  • 你@RunWith(SpringJUnit4ClassRunner.class)吗?
  • 是的。 Junit有什么问题吗?

标签: spring dependency-injection


【解决方案1】:

我发现了问题并修复了它。

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

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

我删除了“implements”,它工作正常。

所以 contextprovider 会变成,

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 2021-06-29
    • 2015-01-30
    • 1970-01-01
    相关资源
    最近更新 更多