2 qq 27825913 qq_27825913 于 2016.02.29 13:52 提问

Jfinal @BY_NAME注解失效
        最近在公司的一个主体是Jfinal,加入了部分Spring的项目中加入了一个新功能,但是遇到了@BY_NAME注解失效的问题,我把部分代码贴出来,希望各位对Jfinal有研究的大神能帮小弟我看看是怎么回事。
        这些类都是复制粘贴了以前写好的类,然后把原来的内容删掉以后再写新的代码的,为了保证类上面的注解能发挥原有的功能。
        controller类名上面有三个注解,分别是@Before(IocInterceptor.class),@ClearInterceptor(ClearLayer.ALL),@ControllerBind(controllerKey = "/XXX", viewPath = "/XXX"),作用分别是拦截位置,清楚拦截以及映射的访问路径。
        在controller中的第一行用@BY_NAME注入了一个services,代码是这样的。
        @BY_NAME    
    private XXXService xxxService;
        在MyEclipse中并没有报错,一切引用编译都是正常的,而在运行到xxxService.xx()方法时,控制台抛出异常,错误信息是:
        org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'xxxService' is defined
        注意这里引号中的是对象名xxxService,并不是类名XXXService.
        这个XXXService类的注解有三个,分别是@Repository,@Lazy(true),@Service。applicationContext.xml中的配置是这样的:<context:annotation-config />
<context:component-scan base-package="com.xt" />
   希望各位对这方面有研究的大神能够不吝赐教,多谢多谢。

2个回答

devmiao
devmiao   Ds   Rxr 2016.02.29 22:39
qq_27825913
qq_27825913   2016.03.03 11:08

问题试出来了。
用下面这种写法:
@BY_NAME

private XXXService XXXService;
那么这个XXXService就能正确引用,能正常工作,说明框架是根据实例名而不是类名去找这个类的。
而之前其他人写的代码里面
@BY_NAME

private XXXService xxxService;
这个xxxService也是能正确引用,也能正常工作,这是为什么?各位大神有什么思路没?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!