Spring Boot使用@Autowired注入对象为null

在做项目的时候,在某类使用@Autowired注入了一个Service层的对象,但在使用的时候,却发现这个Service层实例为null值。

原因:当使用new关键字创建对象时,虽然使用了@Autowired对这个对象进行装配,但实际上Spring不会这样做。因为Spring不会对任何一个new出来的对象进行自动装配,只有当一个对象也是一个在Spring中注册过的Bean,才会获得自动装配的功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

/**
* @Configuration:指明当前类是一个配置类;就是来替代之前的Spring配置文件
*
* 在配置文件中用<bean><bean/>标签添加组件
*
*/
@Configuration
public class MyAppConfig {

//将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
@Bean
public HelloService helloService02(){
System.out.println("配置类@Bean给容器中添加组件了...");
return new HelloService();
}
}

@Configuration会告知Spring这是一个配置类,会为Spring上下文提供bean。@Bean标注的方法表明这些方法返回的对象会以bean的形式添加到Spring的应用上下文中(默认情况下,bean所对应的bean Id就是定义的方法名称)。