[英]Field injection with @Inject in Spring
我在春季使用@Inject
有一些奇怪的行为。 这个例子很好用:
@Controller
@RequestMapping("/")
public class HomeController {
@Autowired
private SomeBean someBean;
@RequestMapping(method = GET)
public String showHome() {
System.out.println(someBean.method());
return "home";
}
}
但是,如果我将@Autowired
替换为@Inject
,则showHome
方法将抛出NullPointerException
因为someBean
为null
。 与二传手注射相同。 但是通过构造函数注入,@ @Autowired
和@Inject
可以很好地工作。
为什么会发生?
我正在使用Spring 4.3.1。 我对pom.xml
依赖性如下所示:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependencies>
Spring支持JSR-330标准注释,您只需要将相关的jar放在类路径中即可。 如果您使用的是maven,请将以下内容添加到pom.xml
:
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
从Spring 4.3开始 , 如果目标bean只定义一个构造函数 ,则不再需要指定@Autowired
注释。 由于您只有一个构造函数,因此无论您使用哪种注释,都将注入必需的依赖项。
还可以查看这篇文章, 了解为何电场注入是邪恶的 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.