• SpringInAction--自动化装配(显示装配之 java注解配置)


    Spring在配置时候有三种方案可选

    1、在xml中进行显示配置

    2、在java中进行显示配置

    3、隐式的Bean发现机制和自动装配

    今天学习的 第二种—— 在java中进行显示配置

    场景:

      尽管在很多场景下通过组件扫描和自动装配实现Spring的自动化配置是更为推荐的方式,但有时候自动化配置的方案行不通,因此需要明确配置Spring。比如说,你想要将第三方库中的组件装配到你的应用中,在这种情况下,是没有办法在它的类上添加@Component和@Autowired注解的,因此就不能使用自动化装配的方案了。在这种情况下,你必须要采用显式装配的方式。(摘自 《Spring In Action》)

    还是以CD机播放CD为例,首先 我们要创造CD接口

    package com.bean.java;
    
    /**
     * Created by IntelliJ IDEA.
     * Author XueYuan
     * Data  2017/02/22
     * Time  10:14
     */
    
    public interface CompactDisc {
    
        void play();
    }

    CD接口有了,那么我们还是先拿一张CD吧 里面有一首歌:

    package com.bean.java;
    
    /**
     * Created by IntelliJ IDEA.
     * Author XueYuan
     * Data  2017/02/22
     * Time  10:14
     */
    
    public class DangNianQing implements CompactDisc {
    
        private String title = "DangNianQing";
        private String artist = "张国荣";
    
    
        public void play() {
            System.out.println("Playing " + title + " By " + artist);
        }
    }

    有了一首歌之后呢,感觉听来听去的单曲循环不过瘾 那我们就再来一个合集

    package com.bean.java;
    
    /**
     * Created by IntelliJ IDEA.
     * Author XueYuan
     * Data  2017/02/22
     * Time  10:57
     */
    
    public class RandomCd implements CompactDisc {
    
        private String title ;
        private String artist = "张国荣";
    
        public RandomCd(String title) {
            this.title = title;
        }
    
        public void play() {
            System.out.println("Playing " + title + " By " + artist);
        }
    }

    碟子有了下面就差播放器了, 我在创造一个播放器。。

    package com.bean.java;
    
    /**
     * Created by IntelliJ IDEA.
     * Author XueYuan
     * Data  2017/02/22
     * Time  10:29
     */
    
    public class CDPlay {
    
        private CompactDisc compactDisc;
    
        public CDPlay(CompactDisc compactDisc) {
            this.compactDisc = compactDisc;
        }
    
        public void play() {
            compactDisc.play();
        }
    
    }

    好了,现在已经创造了四个类 分别是  CDPlay(CompactDisc compactDisc)   、 RandomCd(String song) 、  DangNianQing()  、 CompactDisc()  

    既然java显示配置适用的场景是配置第三方组件的,那么从现在开始,我不知道内部结构是怎样的,现在只知道:

    CDPlay(CompactDisc compactDisc)是开始播放的接方法  compactDisc为是什么碟子

    RandomCd(String song) 是随机选歌的方法 song 为歌名

    DangNianQing() 是播放 当年情 这首歌

    CompactDisc()  CD的接口类,可以看作是 制作碟子的模版(碟子模版制作出来了,之后才刻录么,对吧? ~嗯,对的!)

    播放器有了,碟子也有了 下面就是需要操作了

    package com.bean.java;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * Created by IntelliJ IDEA.
     * Author XueYuan
     * Data  2017/02/22
     * Time  10:08
     */
    
    @Configuration
    public class CDPlayerConfig {
    
    
        /**
         * @Bean 可以不指定名字 默认为方法名——'dangNianQing'
         * @Bean(name="XXX") 也可以指定一个名字
         */
    
       /*@Bean
        public CompactDisc dangNianQing() {
            return new DangNianQing();
        }*/
        @Bean
        public CompactDisc randomCd() {
            int choice = (int) Math.floor(Math.random() * 4);
            switch (choice) {
                case 0:
                    return new RandomCd("dangNianQing");
                case 1:
                    return new RandomCd("qianNvYouHun");
                case 2:
                    return new RandomCd("wo");
                default:
                    return new RandomCd("chenMoShiJing");
            }
        }
    
        @Bean
        public CDPlay cdPlay(CompactDisc compactDisc){
            return new CDPlay(compactDisc);
        }
    
    
    }

    这边在 randomCd() 与 cdPlay() 方法上面添加了 @Bean,就是把这两个方法装配成Bean

    CDPlayerConfig  配置的操作,告诉我们如何去播放随机歌曲的方法,下面就让我们听一下

    package com.bean.java;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    /**
     * Created by IntelliJ IDEA.
     * Author XueYuan
     * Data  2017/02/22
     * Time  10:35
     */
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = CDPlayerConfig.class)
    public class CDPlayerTest {
    
        @Autowired
        CDPlay cdPlay;
    
       /* @Autowired
        RandomCd randomCd;*/
    
        /*@Autowired
        DangNianQing dangNianQing;*/
    
        @Test
        public void test() {
            cdPlay.play();
            //dangNianQing.play();
            //randomCd.play();
        }
    
    
    }

    当执行 test() 的时候:

    步骤1、因为自动装配了CDPlay, 这个时候就会包下查找带有@Bean的 方法

    步骤2、找到了CDPlayerConfig中的 cdPlay(),然后cdPlay()方法中需要有一个CompactDisc(随机播放的cd) 

    步骤3、但是方法中并没有CompactDisc啊 ,所以又要自动查找,这个时候找到了带执行CDPlay 中的play()方法播放

    以上就是Java注解显示的配置Bean方法的简单小例子,如有错误,请指出,谢谢~

    代码:https://github.com/eoooxy/springinaction test下 的com.bean.java 中

  • 相关阅读:
    使用cygwin中的awk工具进行mysql binlog日志查看[利刃篇]
    设置win版vim启动项[利刃篇]
    php cli模式和浏览器访问下加载php.ini文件的注意事项[架构篇]
    sublime text 3中安装ctags支持函数跳转,安装convertToUtf8支持中文步骤[工具篇]
    在notepad++中使用正则匹配功能(一-龥!-~) 中文[利刃篇]
    微软职位内部推荐-SENIOR SOFTWARE ENGINEER
    微软职位内部推荐-Senior SDE
    微软职位内部推荐-SDEII
    微软职位内部推荐-SOFTWARE ENGINEER II
    微软职位内部推荐-SENIOR SOFTWARE ENGINEER
  • 原文地址:https://www.cnblogs.com/eoooxy/p/6428492.html
Copyright © 2020-2023  润新知