2 panwei321 panwei321 于 2015.07.15 21:40 提问

@Service注入无效,但是通过Controller进来的可以成功,这是为啥?

spring MVC+Spring+Mybatis的架构
我的扫描配置如下:

 <context:component-scan base-package="com.pp.susf">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Service" />
    </context:component-scan>
在一个类中使用如下注解注入不可行:
@Autowired
private ITestService testService;

而在Controller中
    @Autowired
private ITestService testService;
则调用正常

4个回答

strutce
strutce   Ds   Rxr 2015.07.15 23:53

是不是你的类上没有写注解@Service

panwei321
panwei321 加了的
大约 3 年之前 回复
panwei321
panwei321   2015.07.16 10:43

补充说明一下,我是用spring加了个任务调度的listener,
我是在listener类中注解的哪些Service,是不是因为这个原因?
web.xml中的调度listener:

<!-- 定时任务 -->

com.xsscd.unionpay.listener.WatchingTaskStatusListener

 任务调度类:
 public class WatchingTaskStatusTimerTask extends TimerTask {

    private static Logger log = Logger.getLogger(WatchingTaskStatusTimerTask.class);

    @Autowired
    private ITaskStatusMonitor taskStatusMonitor;

    @Autowired
    private ITestService testService;

    @Override
    public void run() {
        try {
            // 在这里写要执行的内容
            System.out.println("timeTask start run :"+new Date().toLocaleString());

            System.out.println(testService.test3()); **_//testService为空_**
                //启用到点任务
            if (taskStatusMonitor==null) {
                System.out.println("taskStatusMonitor  that get by @Autowired is null");

                taskStatusMonitor = (TaskStatusMonitor) SpringUtil.getBean("taskStatusMonitor");
                if (taskStatusMonitor==null) {
                    System.out.println("taskStatusMonitor that get by bean name  is null");
                    taskStatusMonitor.activateTask();
                    taskStatusMonitor= new TaskStatusMonitor();
                }
            }
            taskStatusMonitor.activateTask();
strutce
strutce   Ds   Rxr 2015.07.16 10:50

public class WatchingTaskStatusTimerTask extends TimerTask 这里的前面有@Service吗

panwei321
panwei321   2015.07.16 11:34

我大概知道原因了,我发现项目启动时,listener对象是先于哪些注解bean被解析的(不晓得这么说用词是否准确),就感觉这个时候listener的注解bean没有和listener对象挂钩,后面定时任务调用执行的时候也没有。
我的解决办法是直接通过类名来获取的spring bean对象
可以解决当前业务问题了。
后面需要专门研究下,spring的东西太多要理解了,我了解的还不够

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
JAVA+Spring踩坑系列之 @Service无法在controller注入对象成功
@RequestMapping public interface IDiagnoseApi { /** * timeOutMsgs:(诊断超时功能的MsgInfo接收并进行处理). &amp;lt;br/&amp;gt; * * @author zcl * @param msgsStatusRest * @return * @since JDK...
Controller中注入的Service在有的方法中没问题,但却在有的方法中为null
如题,昨天遇到了这样的一个问题,百思不得其解,心想凭什么,为什么同样是方法,为什么在这个方法就为null?难道这个方法是后娘养的?看,同样的groupFrontService,在后面的方法里就为null,找了两三个小时的问题没有找出来。现在记录一下,以免下次再犯。找到最后发现是因为我的这个方法的权限修饰符是private,如图:那为什么它的权限修饰符为private的时候这个service就为nu...
SpringBoot -No1: Controller无法注入 service 的坑
这几天做了个springboot的小项目开始的时候,将启动的类指定为  当前的controller,里面没有依赖注入service ,一切都正常后面专门 做了个MainApp用来启动 , 也在Controller中注入了Service。我把这个类放到了contoller包中但是发现总是启动不起来了.报错的原因是 无法找到  这个service 肯定是 service就没被扫描到。认知中spring...
在Controller层无法注入Service层的对象
Q: ringframework.beans.factory.BeanCreationException: Error creating bean with name ‘registAction’: Injection of autowired dependencies failed; nested exception is org.springframework.bean
Controller中private方法注入的Service为null
Controller中private方法注入的Service为null,public 的正常
啃知识_SpringMVC的controller层@Value注入不进去问题
在项目开发中,近期发现了一个问题.  在controller层的@Value注入不进去properties中配置的数据. 去网上查大家的回答都是说因为SpringMVC中有两个容器.导致问题出现.但是想具体知道什么原因就没有更好的文章了. 经过源码的分析,终于知道了问题所在. 当我们使用Spring的时候,它本身是没有web功能的. 通过SpringMVC从而扩展了Spring的功能. 在使用M
Angularjs中service与controller注入
下文以controller以及service注入为例说明。代码中的scope,scope, http本身也是注入形式引入的。它们是AngularJs自身封装的对象。controller相比于网上常常看到的教程,新版AngularJs(1.3.x)以后对于controller声明有一些限制。
ssm中controller层中注入service层接口
今天在用maven+ssm时,发现一直提示报错:Error creating bean with name ‘自己定义的实现类’: Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not aut...
基于Spring+SpringMVC+Hibernate框架系统, 利用SpringAOP实现写日志,切入点的Controller层出现@AutoWire 注入Service为null的情况分析
基于Spring+SpringMVC+Hibernate框架系统, 利用SpringAOP实现写日志,切入点的Controller层出现@AutoWire 注入Service为null的情况分析 最近为了拓展系统,增加了对Controller层写日志的功能,实现方式是基于Spring的AOP来实现的,具体的实现方法我就写了,网上一大堆实现过程。整个实现过程一开始非常快速简单,而且运行基本没有
【Spring】Service 注入失败,空指针
service层的类都有用@Service标识,但报空指针,注入失败,很可能是因为spring的application配置和springmvc的配置文件配置错误,导致容器冲突了。   spring和springmvc整合后,项目会有2个容器,一个是spring容器,一个是springmvc容器 spring容器是父容器,springmvc容器是spring容器的子容器。 spring容器初