13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

Spring依赖注入@Autowried的这些功能你都知道吗?

环境:spring5.2.15

公司主营业务:做网站、网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出黄山区免费做网站回馈大家。

@Autowried注解首先根据byType注入,如果有多个的情况会按照byName注入,如果没有符合的名称那么系统将会报错。结合@Qualifier限定注入的Bean。

功能1

大意: 从spring4.3开始,如果目标bean只定义了一个构造函数,则不再需要在这样的构造函数上使用@Autowired注释。但是,如果有多个构造函数可用,并且没有主/默认构造函数,则必须至少用@Autowired对其中一个构造函数进行注释,以便指示容器使用哪个构造函数。

示例:

 
 
 
  1. public class SimpleMovieLister { 
  2.   private MovieFinder movieFinder; 
  3.  
  4.   @Autowired 
  5.   public void setMovieFinder(MovieFinder movieFinder) { 
  6.     this.movieFinder = movieFinder; 
  7.   } 

功能2

@Autowired可以将注释应用于具有任意名称和多个参数的方法

示例:

 
 
 
  1. public class MovieRecommender { 
  2.  
  3.   private MovieCatalog movieCatalog; 
  4.  
  5.   private CustomerPreferenceDao customerPreferenceDao; 
  6.  
  7.   @Autowired 
  8.   public void prepare(MovieCatalog movieCatalog,CustomerPreferenceDao customerPreferenceDao) { 
  9.     this.movieCatalog = movieCatalog; 
  10.     this.customerPreferenceDao = customerPreferenceDao; 
  11.   } 

功能3

可以将@Autowired应用于字段,甚至可以将其与构造函数混合使用

 
 
 
  1. public class MovieRecommender { 
  2.   private final CustomerPreferenceDao customerPreferenceDao; 
  3.  
  4.   @Autowired 
  5.   private MovieCatalog movieCatalog; 
  6.  
  7.   @Autowired 
  8.   public MovieRecommender(CustomerPreferenceDao customerPreferenceDao) { 
  9.     this.customerPreferenceDao = customerPreferenceDao; 
  10.   } 

功能4

可以通过将@Autowired注释添加到需要该类型数组的字段或方法上

 
 
 
  1. public class MovieRecommender { 
  2.  
  3.   @Autowired 
  4.   private MovieCatalog[] movieCatalogs; 
  5.  

功能5

可以通过将@Autowired注释添加到需要该类型集合类的字段或方法上

 
 
 
  1. public class MovieRecommender { 
  2.  
  3.   private Set movieCatalogs; 
  4.  
  5.   @Autowired 
  6.   public void setMovieCatalogs(Set movieCatalogs) { 
  7.     this.movieCatalogs = movieCatalogs; 
  8.   } 

注意:如果你希望数组或list列表注入的bean具有顺序,那么你可以对bean实现Ordered接口或者是使用@Order注解或者标准的 @Priority(JavaEE) 注解。上面的Set不具有顺序性

功能6

可以通过将@Autowired注释添加到Map集合的字段或方法上

 
 
 
  1. public class MovieRecommender { 
  2.  
  3.   private Map movieCatalogs; 
  4.  
  5.   @Autowired 
  6.   public void setMovieCatalogs(Map movieCatalogs) { 
  7.     this.movieCatalogs = movieCatalogs; 
  8.   } 

这里的key为Bean的名称。

注意:对于声明的数组、集合或Map集合,至少需要一个匹配元素,否则会错误。

默认情况下使用@Autowired注解意味着是必须具有相应的bean存在,否则程序报错。可以通过如下方式改变默认行为

 
 
 
  1. public class SimpleMovieLister { 
  2.   private MovieFinder movieFinder; 
  3.   @Autowired(required = false) 
  4.   public void setMovieFinder(MovieFinder movieFinder) { 
  5.     this.movieFinder = movieFinder; 
  6.   } 

注意:如果这里没有合适的MovieFinder类型的Bean那么这里的setter方法都不会执行。如果这里是通过构造函数注入,那么即便使用了required = false程序还是会报错。

功能7

可以通过Java 8的Java.util.Optional来表示特定依赖项的非必需性质

 
 
 
  1. public class SimpleMovieLister { 
  2.   @Autowired 
  3.   public void setMovieFinder(Optional movieFinder) { 
  4.   } 

功能8

使用 @Nullable 注解标准非必须依赖项

 
 
 
  1. @Autowired 
  2. public void setMovieFinder(@Nullable MovieFinder movieFinder) { 
  3.   System.out.println("-----movie") ; 
  4.   this.movieFinder = movieFinder; 

功能9

@Autowired可以用于注入 BeanFactory, ApplicationContext, Environment, ResourceLoader, ApplicationEventPublisher, and MessageSource

示例:

 
 
 
  1. @Autowired 
  2. private ApplicationContext context; 

注意:

大意:你不能直接在自定义的BeanPostProcessor或BeanFactoryPostProcessor内使用@Autowired,@Inject,@Value,@Resource注解;必须通过XML或者@Bean 方法的形式进行使用;如果这样用可能会出现各种奇葩问题,你只需知道不要这么用即可。


当前名称:Spring依赖注入@Autowried的这些功能你都知道吗?
网页URL:http://cdbrznjsb.com/article/djcgghe.html

其他资讯

让你的专属顾问为你服务