环境:spring5.2.15@Autowried注解先按照byType注入,如果有多个case,会按照byName注入,如果没有匹配的名字,系统会报错。结合@Qualifier来限制注入的Bean。特性1从SpringFramework4.3开始,如果目标bean仅定义一个构造函数,则不再需要在此类构造函数上使用@Autowired注释。但是,如果有多个构造函数可用并且没有主/默认构造函数,则至少有一个构造函数必须使用@Autowired进行注释,以指示容器使用哪一个。大意是:从spring4.3开始,如果目标bean只定义了一个构造函数,就不再需要在这样的构造函数上使用@Autowired注解了。但是,如果有多个构造函数可用并且没有主/默认构造函数,则至少有一个构造函数必须使用@Autowired注释,以指示容器使用哪个构造函数。示例:publicclassSimpleMovieLister{privateMovieFindermovieFinder;@AutowiredpublicvoidsetMovieFinder(MovieFindermovieFinder){this.movieFinder=movieFinder;}}功能2@Autowired可以将注释应用于具有任意名称和多个参数的方法示例:publicclassMovieRecommender{privateMovieCatalogmovieCatalog;privateCustomerPreferenceDaocustomerPreferenceDao;@Autowiredpublicvoidprepare(MovieCatalogmovieCatalog,CustomerPreferenceDaocustomerPreferenceDao){this.movieCatalog=movieCatalog;this.customerPreferenceDao=customerPreferenceDao;}}功能3可以将@Autowired应用于字段,甚至可以将其与构造函数混合使用publicclassMovieRecommender{privatefinalCustomerPreferenceDaocustomerPreferenceDao;@AutowiredprivateMovieCatalogmovieCatalog;@AutowiredpublicMovieRecommender(CustomerPreferenceDaocustomerPreferenceDao){this.customerPreferenceDao=customerPreferenceDao;}}Function4canbeaddedbyadding@AutowiredannotationtothefieldormethodthatrequiresthistypeofarrayClassfieldsormethodsonpublicclassMovieRecommender{privateSetmovieCatalogs;@AutowiredpublicvoidsetMovieCatalogs(SetmovieCatalogs){this.movi??eCatalogs=movieCatalogs;}}注:如果你希望注入array或者list列表的bean有顺序,那么可以实现Ordered接口bean或者使用@Order注解或者标准的@Priority(JavaEE)注解上面的Set没有顺序函数6可以在Map集合的字段或者方法上加上@Autowired注解publicclassMovieRecommender{privateMapmovieCatalogs;@AutowiredpublicvoidsetMovieCatalogs(MapmovieCatalogs){this.movi??eCatalogs=movieCatalogs;}}这里的关键是Bean的名称。注意:对于声明的数组、集合或Map集合,至少需要有一个匹配的元素,否则会报错。默认情况下,使用@Autowired注解意味着对应的bean必须存在,否则程序会报错。默认行为可以通过publicclassSimpleMovieLister{privateMovieFindermovieFinder;@Autowired(required=false)publicvoidsetMovieFinder(MovieFindermovieFinder){this.movi??eFinder=movieFinder;}}注意:如果没有合适的MovieFinder类型的Bean,这里的setter方法不会实施。如果这个是通过构造函数注入的,那么即使使用了required=false程序,还是会报错。Feature7可以通过Java8的Java.util.OptionalpublicclassSimpleMovieLister{@AutowiredpublicvoidsetMovieFinder(OptionalmovieFinder){}}Feature8使用@Nullable注解来标定非必需依赖@AutowiredpublicvoidsetMovieFinder(@AutowiredpublicvoidsetMovieFinder(@AutowiredpublicvoidsetMovieFinder)NullableMovieFindermovieFinder){System.out.println("-----movie");this.movi??eFinder=movieFinder;}函数9@Autowired可用于注入BeanFactory、ApplicationContext、Environment、ResourceLoader、ApplicationEventPublisher和MessageSource示例:@AutowiredprivateApplicationContextcontext;注意:@Autowired、@Inject、@Value和@Resource注释由SpringBeanPostProcessor实现处理。这意味着您不能在自己的BeanPostProcessor或BeanFactoryPostProcessor类型(如果有)中应用这些注释。这些类型必须通过使用XML或Spring@Bean方法显式“连接”。大意是:不能在自定义的BeanPostProcessor或BeanFactoryPostProcessor中直接使用@Autowired、@Inject、@Value、@Resource注解;它必须以XML或@Bean方法的形式使用;如果以这种方式使用可能会出现各种奇奇怪怪的问题,你只需要知道不要这样用就可以了