从Spring 3.0开始,Spring提供了对 JSR 330标准注解的支持。这些注解可以喝Spring注解一样被扫描到。你只需要将相关的Jar包加入到你的classpath中即可。
注意:如果你使用Maven,javax.inject子包是需要在标准Maven仓库中用到的http://repo1.maven.org/maven2/javax/inject/javax.inject/1/,你需要添加下面的依赖到你的pom.xml文件中。
http://repo1.maven.org/maven2/javax/inject/javax.inject/1/
<dependency> <groupId>javax.inject</groupId> <artifactId>javax.inject</artifactId> <version>1</version> </dependency>
不使用@Autowired,@javax.inject.Inject可以像下面这样被使用:
import javax.inject.Inject; public class SimpleMovieLister { private MovieFinder movieFinder; @Inject public void setMovieFinder(MovieFinder movieFinder) { this.movieFinder = movieFinder; } // ... }
和@Autowired一样,尽可能的在类级别、域级别、方法级别和构造器参数级别来使用@Inject。如果你需要给需要依赖的注入指定限定的名字,你可以使用@Name注解即可:
import javax.inject.Inject; import javax.inject.Named; public class SimpleMovieLister { private MovieFinder movieFinder; @Inject public void setMovieFinder(@Named("main") MovieFinder movieFinder) { this.movieFinder = movieFinder; } // ... }
可以替代@Component注解,@javax.inject.Named可以这样被使用:
import javax.inject.Inject; import javax.inject.Named; @Named("movieListener") public class SimpleMovieLister { private MovieFinder movieFinder; @Inject public void setMovieFinder(MovieFinder movieFinder) { this.movieFinder = movieFinder; } // ... }
使用@Component注解不需要指明组件的名字,@Named也可以以相似的风格来使用:
import javax.inject.Inject; import javax.inject.Named; @Named public class SimpleMovieLister { private MovieFinder movieFinder; @Inject public void setMovieFinder(MovieFinder movieFinder) { this.movieFinder = movieFinder; } // ... }
在使用@Named的时候,可以像使用Spring注解一样来使用组件扫描:
<beans> <context:component-scan base-package="org.example"/> </beans>
当使用标准注解的使用,知道一些有意义的功能但不是可用的是有必要的:
原文链接:https://www.cnblogs.com/zhangminghui/p/4266590.html