Bean没有自动装配

时间:2014-10-20 12:51:01

标签: java spring

我目前有一个application-context.cml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:tx="http://www.springframework.org/schema/tx"
  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
http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx.xsd"
  default-autowire="byType">


  <context:annotation-config />
  <tx:annotation-driven />

  <bean class="app.bl.facade.impl.DishFacadeImpl" />

我正试图自动装配它:

@Autowired
private DishFacade dishFacade;

public List<Dish> getEvents() {
    System.out.println(dishFacade);
    return dishFacade.getAll();
}

我打印出的结果是null,我无法弄明白为什么。

2 个答案:

答案 0 :(得分:0)

假设您的包裹为app.bl.facade,您必须将此标记放在application-context.xml

<context:component-scan base-package="app.bl.facade" />

以上XML标记将执行自动扫描。应该创建为bean的每个类都使用正确的stereotype注释进行注释,如@Component(对于一般bean)或@Controller(对于servlet控制器)或@Repository(对于DAO类)或@Service,这些类应放在相同的基础包app.bl.facade下。

如果满足以上条件,那么spring将自动找到所有这些并为每个创建一个bean。

答案 1 :(得分:0)

您的默认自动接线模式为&#34; byType&#34;。对于这种类型的自动装配,使用类类型。因此,在spring bean配置文件中只应该为此类型配置一个bean。

所以你应该自动连接DishFacadeImpl而不是DishFacade,我认为这是接口。

This可能会有所帮助。