环境:spring5.2.15
公司主营业务:做网站、网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出黄山区免费做网站回馈大家。
@Autowried注解首先根据byType注入,如果有多个的情况会按照byName注入,如果没有符合的名称那么系统将会报错。结合@Qualifier限定注入的Bean。
大意: 从spring4.3开始,如果目标bean只定义了一个构造函数,则不再需要在这样的构造函数上使用@Autowired注释。但是,如果有多个构造函数可用,并且没有主/默认构造函数,则必须至少用@Autowired对其中一个构造函数进行注释,以便指示容器使用哪个构造函数。
示例:
- public class SimpleMovieLister {
- private MovieFinder movieFinder;
- @Autowired
- public void setMovieFinder(MovieFinder movieFinder) {
- this.movieFinder = movieFinder;
- }
- }
@Autowired可以将注释应用于具有任意名称和多个参数的方法
示例:
- public class MovieRecommender {
- private MovieCatalog movieCatalog;
- private CustomerPreferenceDao customerPreferenceDao;
- @Autowired
- public void prepare(MovieCatalog movieCatalog,CustomerPreferenceDao customerPreferenceDao) {
- this.movieCatalog = movieCatalog;
- this.customerPreferenceDao = customerPreferenceDao;
- }
- }
可以将@Autowired应用于字段,甚至可以将其与构造函数混合使用
- public class MovieRecommender {
- private final CustomerPreferenceDao customerPreferenceDao;
- @Autowired
- private MovieCatalog movieCatalog;
- @Autowired
- public MovieRecommender(CustomerPreferenceDao customerPreferenceDao) {
- this.customerPreferenceDao = customerPreferenceDao;
- }
- }
可以通过将@Autowired注释添加到需要该类型数组的字段或方法上
- public class MovieRecommender {
- @Autowired
- private MovieCatalog[] movieCatalogs;
- }
可以通过将@Autowired注释添加到需要该类型集合类的字段或方法上
- public class MovieRecommender {
- private Set
movieCatalogs; - @Autowired
- public void setMovieCatalogs(Set
movieCatalogs) { - this.movieCatalogs = movieCatalogs;
- }
- }
注意:如果你希望数组或list列表注入的bean具有顺序,那么你可以对bean实现Ordered接口或者是使用@Order注解或者标准的 @Priority(JavaEE) 注解。上面的Set不具有顺序性
可以通过将@Autowired注释添加到Map集合的字段或方法上
- public class MovieRecommender {
- private Map
movieCatalogs; - @Autowired
- public void setMovieCatalogs(Map
movieCatalogs) { - this.movieCatalogs = movieCatalogs;
- }
- }
这里的key为Bean的名称。
注意:对于声明的数组、集合或Map集合,至少需要一个匹配元素,否则会错误。
默认情况下使用@Autowired注解意味着是必须具有相应的bean存在,否则程序报错。可以通过如下方式改变默认行为
- public class SimpleMovieLister {
- private MovieFinder movieFinder;
- @Autowired(required = false)
- public void setMovieFinder(MovieFinder movieFinder) {
- this.movieFinder = movieFinder;
- }
- }
注意:如果这里没有合适的MovieFinder类型的Bean那么这里的setter方法都不会执行。如果这里是通过构造函数注入,那么即便使用了required = false程序还是会报错。
可以通过Java 8的Java.util.Optional来表示特定依赖项的非必需性质
- public class SimpleMovieLister {
- @Autowired
- public void setMovieFinder(Optional
movieFinder) { - }
- }
使用 @Nullable 注解标准非必须依赖项
- @Autowired
- public void setMovieFinder(@Nullable MovieFinder movieFinder) {
- System.out.println("-----movie") ;
- this.movieFinder = movieFinder;
- }
@Autowired可以用于注入 BeanFactory, ApplicationContext, Environment, ResourceLoader, ApplicationEventPublisher, and MessageSource
示例:
- @Autowired
- private ApplicationContext context;
注意:
大意:你不能直接在自定义的BeanPostProcessor或BeanFactoryPostProcessor内使用@Autowired,@Inject,@Value,@Resource注解;必须通过XML或者@Bean 方法的形式进行使用;如果这样用可能会出现各种奇葩问题,你只需知道不要这么用即可。
网站标题:Spring依赖注入@Autowried的这些功能你都知道吗?
本文路径:http://www.csdahua.cn/qtweb/news31/134731.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网