Vit*_*nko 6 java spring spring-mvc jsr330
我@Inject在Spring的工作中有一些奇怪的行为.这个例子效果很好:
@Controller
@RequestMapping("/")
public class HomeController {
@Autowired
private SomeBean someBean;
@RequestMapping(method = GET)
public String showHome() {
System.out.println(someBean.method());
return "home";
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我取代@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>
Run Code Online (Sandbox Code Playgroud)
Spring支持JSR-330标准注释,你只需要把相关的jar放在你的类路径中即可。如果您使用的是 Maven,请将以下内容添加到您的pom.xml:
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
从Spring 4.3开始,如果目标 bean 仅定义一个构造函数,则不再需要指定该@Autowired注解。由于您只有一个构造函数,因此无论您使用哪种注释,都将注入所需的依赖项。
另请查看这篇文章,了解为什么现场注入是邪恶的。
| 归档时间: |
|
| 查看次数: |
717 次 |
| 最近记录: |