@Autowired注解returns null
@Autowired annotation returns null
当我在 Spring 框架中开发时,我想在特定 class 上使用 mybatis 访问数据库,这是问题。
public class ScheduleManager {
private Scheduler scheduler;
@Autowired
private TriggerService triggerService;
public void doit() {
System.out.println(triggerService);
}
}
这里triggerService的值为null。我认为 triggerService 不是自动装配的。
但是它是在 class 处自动装配的。
@Controller
public class TestController {
@Autowired
private TriggerService triggerService;
@RequestMapping("/scheduletest")
public String scheduleTest() {
System.out.println(triggerService);
ScheduleManager sm = new ScheduleManager();
sm.doit();
}
}
此代码打印一些非空值。
调度员-servlet.xml
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config/>
<context:component-scan base-package="com.scheduler"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
<property name="contentType" value="text/html;charset=UTF-8"/>
<property name="order" value="0"/>
</bean>
</beans>
触发服务接口
@Service
public interface TriggerService {
public List<Trigger> getAll();
}
为什么会出现这个问题?
你的TriggerService
只是一个接口,spring怎么可能找到实际的实现。
从 TriggerService
中删除 @Service
并将其添加到 TriggerService
的实现之一将解决您的问题
您自己创建ScheduleManager实例:
ScheduleManager sm = new ScheduleManager();
所以 Spring 不知道这个对象,也没有做任何自动装配。
要解决此问题,请将 @Component
注释添加到 ScheduleManager
并让它也注入控制器:
@Autowired
private ScheduleManager scheduleManager;
当我在 Spring 框架中开发时,我想在特定 class 上使用 mybatis 访问数据库,这是问题。
public class ScheduleManager {
private Scheduler scheduler;
@Autowired
private TriggerService triggerService;
public void doit() {
System.out.println(triggerService);
}
}
这里triggerService的值为null。我认为 triggerService 不是自动装配的。
但是它是在 class 处自动装配的。
@Controller
public class TestController {
@Autowired
private TriggerService triggerService;
@RequestMapping("/scheduletest")
public String scheduleTest() {
System.out.println(triggerService);
ScheduleManager sm = new ScheduleManager();
sm.doit();
}
}
此代码打印一些非空值。
调度员-servlet.xml
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config/>
<context:component-scan base-package="com.scheduler"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
<property name="contentType" value="text/html;charset=UTF-8"/>
<property name="order" value="0"/>
</bean>
</beans>
触发服务接口
@Service
public interface TriggerService {
public List<Trigger> getAll();
}
为什么会出现这个问题?
你的TriggerService
只是一个接口,spring怎么可能找到实际的实现。
从 TriggerService
中删除 @Service
并将其添加到 TriggerService
的实现之一将解决您的问题
您自己创建ScheduleManager实例:
ScheduleManager sm = new ScheduleManager();
所以 Spring 不知道这个对象,也没有做任何自动装配。
要解决此问题,请将 @Component
注释添加到 ScheduleManager
并让它也注入控制器:
@Autowired
private ScheduleManager scheduleManager;