问题描述
- @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; 则调用正常
解决方案
是不是你的类上没有写注解@Service
解决方案二:
补充说明一下,我是用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();
解决方案三:
public class WatchingTaskStatusTimerTask extends TimerTask 这里的前面有@Service吗
解决方案四:
我大概知道原因了,我发现项目启动时,listener对象是先于哪些注解bean被解析的(不晓得这么说用词是否准确),就感觉这个时候listener的注解bean没有和listener对象挂钩,后面定时任务调用执行的时候也没有。
我的解决办法是直接通过类名来获取的spring bean对象
可以解决当前业务问题了。
后面需要专门研究下,spring的东西太多要理解了,我了解的还不够
时间: 2024-11-03 17:01:15