在春季@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都能很好地工作。
为什么会发生这种事?
我正在使用Spring4.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>发布于 2016-09-12 08:27:31
Spring支持JSR-330标准注释,您只需要将相关的jars放在类路径中即可。如果您正在使用maven,请将以下内容添加到您的pom.xml中
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>为什么构造器注入工作?
从春季4.3开始,如果目标bean只定义一个构造函数,则不再需要指定@Autowired注释。因为您只有一个构造函数,所以无论您使用哪个注释,都会注入所需的依赖项。
也可以在为什么场注入是邪恶的上查看这篇文章。
https://stackoverflow.com/questions/39445575
复制相似问题