zoukankan      html  css  js  c++  java
  • SpringFramework|@Primary

    @Primary的使用

    前述

    Java: 1.8

    Maven: 3

    SpringFramework版本以及各组件成员: 5.1.1.RELEASE

    • spring-context
    • spring-core
    • spring-beans

    @Primary表示当多个bean可以自动装配到单值依赖项时,应该优先选择特定的bean。如果候选者中只存在一个主bean,则它将成为自动装配的值。

    示例

    电影的Bean类: Movie. 将会有两个MovieBean, 而我们需要播放第一场电影 - 动作片. 接下来才是喜剧片.

    电影Bean - Movie.java

    package yag;
    
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class Movie {
    
        private String content;
    
        public String getContent() {
            return content;
        }
    
        public void setContent(String content) {
            this.content = content;
        }
    
        public Movie(){
    
        }
    }
    

    播放者(BeanUser) - MovieShower.java

    package yag;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class MovieShower {
    
        private Movie movie;
    
        // 注入Movie实例
        @Autowired
        public void setMovie(Movie movie) {
            this.movie = movie;
        }
    
        // 使用实例
        public void show(){
            // 播放影片内容
            System.out.println(movie.getContent());
        }
    }
    

    Java配置 - MovieConfig.java

    package yag;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    
    @Configuration
    public class MovieConfig {
    
        @Bean
        @Primary
        public Movie firstMovie(){
            // 用了这个方法来替代XML配置中的value属性以赋固定值.
            Movie movie = new Movie();
            movie.setContent("正在播放动作片");
            return movie;
        }
    
        @Bean
        public Movie secondMovie(){
            Movie movie = new Movie();
            movie.setContent("正在播放喜剧电影");
            return new Movie();
        }
    
        // BeanUser
        @Bean
        public MovieShower movieShower(){
            return new MovieShower();
        }
    }
    

    启用注解扫描 - spring-beans.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
        <context:annotation-config/>
        <context:component-scan base-package="yag"/>
    </beans>
    

    执行者

    package yag;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    public class Runner {
    
        public static void main(String[] args){
            ApplicationContext c = new AnnotationConfigApplicationContext(MovieConfig.class);
            MovieShower shower = c.getBean(MovieShower.class);
            shower.show();
        }
    }
    

    运行结果

    正在播放动作片
    
    Process finished with exit code 0
    
  • 相关阅读:
    python 包管理工具 pip 的配置
    Python 变量作用域 LEGB (下)—— Enclosing function locals
    Python 变量作用域 LEGB (上)—— Local,Global,Builtin
    2020 Java 面试题 小结 (答案慢慢补上,有错误请指出)
    mysql 根据日期(date)做年,月,日分组统计查询
    jvm指令
    正则表达式 分割地址 获取省市区详细地址
    .Net 异常记录
    WCF设计服务协议(一)
    plsql ORA-01789:查询块具有不正确的结果列数
  • 原文地址:https://www.cnblogs.com/shwo/p/9889029.html
Copyright © 2011-2022 走看看