如果删除了组件扫描,则@Autowired不起作用

时间:2012-11-01 12:23:00

标签: spring autowired explicit

我遇到了问题,如果从配置中删除组件扫描标记,注释@Autowired将不再起作用(在所有使用此注释的Java类中)

<?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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

  <context:component-scan base-package="efco.auth" />

here are some beans...

efco.auth包中只有一个类,这个类与以下类EfcoBasketLogic无关。

和使用@Autowired的课程:

package efco.logic;
    public class EfcoBasketLogic extends BasketLogicImpl {

        @Autowired
        private EfcoErpService erpService;

此Bean在其他spring配置文件中定义:

<bean id="BasketLogic" class="efco.logic.EfcoBasketLogic">
    <property name="documentLogic" ref="DocumentLogic" />
    <property name="stateAccess" ref="StateAccess" />
    <property name="contextAccess" ref="ContextAccess" />
  </bean>

如您所见,未定义erpService。其他三个属性在BasketLogicImpl上,并有setter。

我做错了什么?

2 个答案:

答案 0 :(得分:15)

正如Tomasz所说,<context:annotation-config/>需要@Autowired才能工作。当您使用<context:component-scan/>时,它会隐式包含annotation-config

答案 1 :(得分:0)

在bean声明中添加autowire="byType"autowire="byName"应该可以完成这项工作。