我已执行此步骤以使用基于注释的配置:
a)beans.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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<context:annotation-config/>
<context:component-scan base-package="test.*"/>
</beans>
b)然后我有这个组件:
package test;
@Component
public class InMemoryUserService implements UserService
c)然后我尝试使用autowire:
@Autowired
private UserService userService;
并且在运行时userService
为空。
基本内容设置正确(如依赖项等),因为在测试应用程序的第一个版本中,我使用的是基于xml的配置,并且它运行顺畅。
这是一个使用自动装配的课程:
public class DemoApplication {
@Autowired
private UserService userService;
public DemoApplication() {
}
public static void main(String[] args) {
DemoApplication da = new DemoApplication();
da.userService.getUserByEmail("blabla@gmail.com");
}
}
还有什么我想念的吗?
答案 0 :(得分:1)
那是因为 -
@Component
不是Spring托管bean。通过添加与UserService
类似的ClasspathXMLApplicationContext
来对其进行管理。DemoApplication
)来获取new
而不是i
运算符。答案 1 :(得分:-1)
Spring如何知道必须运行此DemoApplication。
您必须使用SpringJunit4ClassRunner
以下内容运行它:
注释您的DemoApplication,如下所示:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class DemoApplication {
@Autowired
private UserService userService;
@Test
public void testBean() {
userService.getUserByEmail("");
}
}