java - @Autowired 失败 - java.lang.ClassCastException

标签 java dependency-injection


我正在使用 java config 来配置我的 Bean:

   @Configuration
public class SpringJavaConfig { 
    @Bean
    public IBrandsApi getBrandsApi(){
        return new BrandsApi();
    }
}

在将 spring 感知加载到 SpringJavaConfig 时,我可以在 Debug模式下看到。

在我的 Controller 中,我使用 Autowiring :

@Controller
@RequestMapping("/api/brands")
public class BrandsController extends BaseController {

BrandsApi brandsApi;

@Autowired
public void setBrandsApi(IBrandsApi brandsApi){
    this.brandsApi = (BrandsApi)brandsApi;
}

}

这是品牌 API 声明:

@Transactional
public  class BrandsApi extends BaseApplicationAPI<Object> implements IBrandsApi {

    public BrandsApi(){

    }
}
@Transactional
public interface IBrandsApi {}

这是我在加载 tomcat 时遇到的异常:

 Mar 9, 2011 9:50:54 AM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'brandsController': Injection of autowired dependencies failed; nested exception is java.lang.ClassCastException: $Proxy46 cannot be cast to com.affiliates.BrandsApi
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:285)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1074)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4521)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5004)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:4999)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:636)
Caused by: java.lang.ClassCastException: $Proxy46 cannot be cast to com.affiliates.BrandsApi
    at com.affiliates.controllers.BrandsController.setBrandsApi(BrandsController.java:37)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:582)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:282)
    ... 21 more

最佳答案

查看这个问题:Application context bean .

为什么要将服务降级为 BrandsApi?您不应该只使用界面吗?

关于java - @Autowired 失败 - java.lang.ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5242672/

相关文章:

java - 如何使用 jcc 在 python 中转换变量

java - 无法为同一切面类的方法设置建议

php - ZF2 依赖注入(inject)别名和多个实例

java - 在不创建 2 个 guice 帮助程序接口(interface)的情况下使用自定义参数注入(inject)变量?

design-patterns - 使用依赖注入(inject)有哪些缺点?

dependency-injection - 在 Asp.net Web Api2 中使用 Microsoft.Extension.DependencyInjection

java - SSD 上的键/值存储速度极慢

java - 如何使用 java 在 json 对象中附加键值

java - 将 Json 解析为 Java

java - 稍后如何引用内联创建的对象