使用Spring MVC,我有这个Controller类:
@Controller
public class LoginController {
@Autowired
private LoginService loginService;
// more code and a setter to loginService
}
LoginService
是一个接口,其唯一的实现是LoginServiceImpl
:
public class LoginServiceImpl implements LoginService {
//
}
我的project-name-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-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/" />
<property name="suffix" value=".jsp" />
</bean>
<bean id="loginService" class="my.example.service.impl.LoginServiceImpl" />
<bean class="my.example.controller.LoginController" />
</beans>
问题是,loginService
未注入控制器。如果我在XML文件中指定注入,如下所示:它可以工作:
<bean id="loginService"
class="may.example.service.impl.LoginServiceImpl" />
<bean class="my.example.controller.LoginController">
<property name="loginService" ref="loginService"></property>
</bean>
为什么会这样?不应该在接口类型注入点注入唯一的实现bean吗?
答案 0 :(得分:1)
您必须为自动装配添加AutowiredAnnotationBeanPostProcessor - 默认情况下它是byType,因此您无需执行任何明确的操作即可将loginService注入LoginController。如链接所示,您可以放置<context:annotation-config/>
或<context:component-scan/>
来自动注册AutowiredAnnotationBeanPostProcessor。
答案 1 :(得分:0)
对我有用的解决方案是将自动线类型定义为byType
:
<bean id="loginService"
class="my.example.service.impl.LoginServiceImpl"
autowire="byType" />
<bean class="my.example.controller.LoginController"
autowire="byType" />
此外,我删除了@Autowired
注释。