带注释的弹簧配置@Autowired不工作 - 一步一步

时间:2016-05-21 12:01:18

标签: spring spring-annotations

我已执行此步骤以使用基于注释的配置:

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");
    }
}

还有什么我想念的吗?

2 个答案:

答案 0 :(得分:1)

那是因为 -

  • @Component不是Spring托管bean。通过添加与UserService类似的ClasspathXMLApplicationContext来对其进行管理。
  • 使用spring bean工厂或应用程序上下文(例如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("");
    }

    }