zoukankan      html  css  js  c++  java
  • Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.9.2 @Autowired

    6.9.2 @Autowired

    正如料想的那样,您可以将@Autowired应用于传统的setter方法:

    public class SimpleMovieLister {
    
        private MovieFinder movieFinder;
    
        @Autowired
        public void setMovieFinder(MovieFinder movieFinder) {
            this.movieFinder = movieFinder;
        }
    
        // ...
    
    }

    在下面的示例中,可以使用JSR 330@Inject代替Spring@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 {
    
        @Autowired
        private MovieCatalog movieCatalog;
    
        private CustomerPreferenceDao customerPreferenceDao;
    
        @Autowired
        public MovieRecommender(CustomerPreferenceDao customerPreferenceDao) {
            this.customerPreferenceDao = customerPreferenceDao;
        }
    
        // ...
    
    }

    通过将注添加到需要该类型数组的字段或方法,还可以通过ApplicationContext提供特定类型的所有bean

    public class MovieRecommender {
    
        @Autowired
        private MovieCatalog[] movieCatalogs;
    
        // ...
    
    }

    这同样适用于类型集合:

    public class MovieRecommender {
    
        private Set<MovieCatalog> movieCatalogs;
    
        @Autowired
        public void setMovieCatalogs(Set<MovieCatalog> movieCatalogs) {
            this.movieCatalogs = movieCatalogs;
        }
    
        // ...
    
    }

    您的bean可以实现org.springframework.core.Ordered接口,或者如果您希望将数组或列表中的项目按特定顺序排序,请使用@Order或标准的@Priority注解

    只要预期的键类型是String,即使是类型化的Maps也可以自动装配。Map值将包含所需类型的所有bean,并且键将包含相应的bean名称:

    public class MovieRecommender {
    
        private Map<String, MovieCatalog> movieCatalogs;
    
        @Autowired
        public void setMovieCatalogs(Map<String, MovieCatalog> movieCatalogs) {
            this.movieCatalogs = movieCatalogs;
        }
    
        // ...
    
    }

    默认情况下,只要零个候选bean可用,自动装配就会失败默认行为是将带注的方法,构造函数和字段视为指示所需的依赖项。可以更改此行为,如下所示。

    public class SimpleMovieLister {
    
        private MovieFinder movieFinder;
    
        @Autowired(required=false)
        public void setMovieFinder(MovieFinder movieFinder) {
            this.movieFinder = movieFinder;
        }
    
        // ...
    
    }

    每个类只能标记一个required的构造函数,但可以注多个非必需的构造函数。 在这种情况下,每个都被认为是候选者之一,Spring使用最贪心的依赖性可以得到满足构造函数,即具有最大参数数量的构造函数。

    建议使用@Autowiredrequired属性而不是@Required required属性表示该属性不是自动装配所必需的,如果无法自动装配,则会忽略该属性。 另一方面,@ Required更强大,因为它强制要求由容器支持的任何方式设置属性。如果未注入任何值,则会引发相应的异常。

    您还可以将@Autowired用于众所周知的可解析依赖项的接口:BeanFactoryApplicationContextEnvironmentResourceLoaderApplicationEventPublisherMessageSource。这些接口及其扩展接口(如ConfigurableApplicationContextResourcePatternResolver)将自动解析,无需特殊设置。

    public class MovieRecommender {
    
        @Autowired
        private ApplicationContext context;
    
        public MovieRecommender() {
        }
    
        // ...
    
    }

    @Autowired@ Inject@ Resource@ValueSpring BeanPostProcessor实现来进行处理,这反过来意味着您不能在自己的BeanPostProcessorBeanFactoryPostProcessor类型(如果有)中应用这些注。必须通过XML或使用Spring @Bean方法显式地连接这些类型。

  • 相关阅读:
    kafka学习
    centos/Fedora/RHEL 安全设置
    cordon、drain、delete node区别
    HARBOR 仓库 API功能接口
    gcr 镜像无法下载问题
    linux系统 重启盘符错乱问题
    Kafka史上最详细原理总结
    redis 部署
    mongodb4.0 安装
    gitstats 统计gitlab仓库中的代码
  • 原文地址:https://www.cnblogs.com/springmorning/p/10389316.html
Copyright © 2011-2022 走看看