@Autowired注释返回null

时间:2016-05-13 08:23:47

标签: spring annotations dependencies code-injection autowired

当我在Spring Framework中开发时,我想在特定的类上使用mybatis访问数据库,这里有问题。

     public class ScheduleManager {

            private Scheduler scheduler;

            @Autowired
            private TriggerService triggerService;

            public void doit() {

                    System.out.println(triggerService);

            }

        }

此处,triggerService的值为null。我认为triggerService没有自动装配。

但它是在这堂课上自动装配的。

 @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>

TriggerService接口

@Service
public interface TriggerService {
    public List<Trigger> getAll();
}

为什么会出现此问题?

2 个答案:

答案 0 :(得分:1)

您自己创建ScheduleManager实例:

ScheduleManager sm = new ScheduleManager();

所以Spring并不知道这个对象并且没有做任何自动装配。 要解决此问题,请将@Component注释添加到ScheduleManager并让它也注入控制器:

@Autowired
private ScheduleManager scheduleManager;

答案 1 :(得分:0)

你的TriggerService只是一个界面,春天怎么能找到真正的实施。

@Service移除TriggerService并将其添加到TriggerService的其中一个实施中,以解决您的问题