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

1、在xml中进行显示配置

2、在java中进行显示配置

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

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

场景:

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

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

  1. package com.bean.java;
  2.  
  3. /**
  4. * Created by IntelliJ IDEA.
  5. * Author XueYuan
  6. * Data 2017/02/22
  7. * Time 10:14
  8. */
  9.  
  10. public interface CompactDisc {
  11.  
  12. void play();
  13. }

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

  1. package com.bean.java;
  2.  
  3. /**
  4. * Created by IntelliJ IDEA.
  5. * Author XueYuan
  6. * Data 2017/02/22
  7. * Time 10:14
  8. */
  9.  
  10. public class DangNianQing implements CompactDisc {
  11.  
  12. private String title = "DangNianQing";
  13. private String artist = "张国荣";
  14.  
  15. public void play() {
  16. System.out.println("Playing " + title + " By " + artist);
  17. }
  18. }

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

  1. package com.bean.java;
  2.  
  3. /**
  4. * Created by IntelliJ IDEA.
  5. * Author XueYuan
  6. * Data 2017/02/22
  7. * Time 10:57
  8. */
  9.  
  10. public class RandomCd implements CompactDisc {
  11.  
  12. private String title ;
  13. private String artist = "张国荣";
  14.  
  15. public RandomCd(String title) {
  16. this.title = title;
  17. }
  18.  
  19. public void play() {
  20. System.out.println("Playing " + title + " By " + artist);
  21. }
  22. }

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

  1. package com.bean.java;
  2.  
  3. /**
  4. * Created by IntelliJ IDEA.
  5. * Author XueYuan
  6. * Data 2017/02/22
  7. * Time 10:29
  8. */
  9.  
  10. public class CDPlay {
  11.  
  12. private CompactDisc compactDisc;
  13.  
  14. public CDPlay(CompactDisc compactDisc) {
  15. this.compactDisc = compactDisc;
  16. }
  17.  
  18. public void play() {
  19. compactDisc.play();
  20. }
  21.  
  22. }

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

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

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

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

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

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

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

  1. package com.bean.java;
  2.  
  3. import org.springframework.context.annotation.Bean;
  4. import org.springframework.context.annotation.Configuration;
  5.  
  6. /**
  7. * Created by IntelliJ IDEA.
  8. * Author XueYuan
  9. * Data 2017/02/22
  10. * Time 10:08
  11. */
  12.  
  13. @Configuration
  14. public class CDPlayerConfig {
  15.  
  16. /**
  17. * @Bean 可以不指定名字 默认为方法名——'dangNianQing'
  18. * @Bean(name="XXX") 也可以指定一个名字
  19. */
  20.  
  21. /*@Bean
  22. public CompactDisc dangNianQing() {
  23. return new DangNianQing();
  24. }*/
  25. @Bean
  26. public CompactDisc randomCd() {
  27. int choice = (int) Math.floor(Math.random() * 4);
  28. switch (choice) {
  29. case 0:
  30. return new RandomCd("dangNianQing");
  31. case 1:
  32. return new RandomCd("qianNvYouHun");
  33. case 2:
  34. return new RandomCd("wo");
  35. default:
  36. return new RandomCd("chenMoShiJing");
  37. }
  38. }
  39.  
  40. @Bean
  41. public CDPlay cdPlay(CompactDisc compactDisc){
  42. return new CDPlay(compactDisc);
  43. }
  44.  
  45. }

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

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

  1. package com.bean.java;
  2.  
  3. import org.junit.Test;
  4. import org.junit.runner.RunWith;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.test.context.ContextConfiguration;
  7. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  8.  
  9. /**
  10. * Created by IntelliJ IDEA.
  11. * Author XueYuan
  12. * Data 2017/02/22
  13. * Time 10:35
  14. */
  15.  
  16. @RunWith(SpringJUnit4ClassRunner.class)
  17. @ContextConfiguration(classes = CDPlayerConfig.class)
  18. public class CDPlayerTest {
  19.  
  20. @Autowired
  21. CDPlay cdPlay;
  22.  
  23. /* @Autowired
  24. RandomCd randomCd;*/
  25.  
  26. /*@Autowired
  27. DangNianQing dangNianQing;*/
  28.  
  29. @Test
  30. public void test() {
  31. cdPlay.play();
  32. //dangNianQing.play();
  33. //randomCd.play();
  34. }
  35.  
  36. }

当执行 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 中

SpringInAction--自动化装配(显示装配之 java注解配置)的更多相关文章

  1. Spring框架入门之基于Java注解配置bean

    Spring框架入门之基于Java注解配置bean 一.Spring bean配置常用的注解 常用的有四个注解 Controller: 用于控制器的注解 Service : 用于service的注解 ...

  2. Java注解配置

    Java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明.配置的功能.注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用.包含在 java.lang.annota ...

  3. IDEA+Tomcat+Maven+SpringMVC基于Java注解配置web工程

    1.在IDEA中新建Maven工程,使用archetype. 2.添加Maven依赖 <dependencies> <dependency> <groupId>ju ...

  4. Spring基础篇——通过Java注解和XML配置装配bean

    自动化装配的确有很大的便利性,但是却并不能适用在所有的应用场景,比如需要装配的组件类不是由自己的应用程序维护,而是引用了第三方的类库,这个时候自动装配便无法实现,Spring对此也提供了相应的解决方案 ...

  5. Spring基础篇——通过Java注解和XML配置装配bean(转载)

      作者:陈本布衣 出处:http://www.cnblogs.com/chenbenbuyi 本文版权归作者和博客园共有,欢迎转载分享,但必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留 ...

  6. [原创]java WEB学习笔记103:Spring学习---Spring Bean配置:基于注解的方式(基于注解配置bean,基于注解来装配bean的属性)

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. IDEA02 利用Maven创建Web项目、为Web应用添加Spring框架支持、bean的创建于获取、利用注解配置Bean、自动装配Bean、MVC配置

    1 环境版本说明 Jdk : 1.8 Maven : 3.5 IDEA : 专业版 2017.2 2 环境准备 2.1 Maven安装及其配置 2.2 Tomcat安装及其配置 3 详细步骤 3.1 ...

  8. 使用Java注解自动化处理对应关系实现注释代码化

    概述 假设我们要从一个 ES 索引(相当于一张DB表)查询数据,ES表有 biz_no, type, status 等字段, 而应用对象则有属性 bizNo, type, status 等.这样,就会 ...

  9. Spring随笔-bean装配-自动装配

    Spring提供了三种装配方式 1.XML文件进行显式装配 2.java中进行显示装配 3.自动化装配 1.自动化装配的两种实现方式 1.组件扫描:Spring会自动发现应用上下文中创建的bean 2 ...

随机推荐

  1. redis 简单命令操作

    一.概述: 在该系列的前几篇博客中,主要讲述的是与Redis数据类型相关的命令,如String.List.Set.Hashes和Sorted-Set.这些命令都具有一个共同点,即所有的操作都是针对与K ...

  2. python3_UUID模块详解

    1.知识背景 UUID是128位的全局唯一标识符,通常有32字节的字母表示.它可以保证时间和空间的唯一性. UUID——Universally unique identifier 在python中叫U ...

  3. JS的魅力

    一.初探JavaScript魅力 基本知识: JavaScript是什么 网页特效原理 -JavaScript就是修改样式 编写JS流程 - 布局:HTML + CSS - 属性:确定修改哪些属性 - ...

  4. XPO开发指南简要

    一.XPO简介: XPO即eXpress Persistent Objects for .NET,现在这里介绍的版本是1.5. XPO在应用程序代码和数据库之间扮演了一个中间层的角色,简单而言,就是将 ...

  5. hadoop cgroup+container配置

    配置container-executor.cfg vim etc/hadoop/container-executor.cfg yarn.nodemanager.linux-container-exec ...

  6. 20145302张薇《Java程序设计》第八周学习总结

    20145302 <Java程序设计>第八周学习总结 教材学习内容总结 第十五章 日志API简介 使用日志的起点是Logger类,要取得Logger类,必须使用Logger的静态方法get ...

  7. 20145324Java课程总结

    20145324课程总结 ●每周读书笔记链接总汇 [第一周](http://www.cnblogs.com/SJZGM10/p/5246770.html) 第二周(不小心删了) [第三周](http: ...

  8. Jquery 复制功能

    使用clipboardjs插件实现鼠标点击复制功能: 官网:https://clipboardjs.com/ 使用示例: 1.引入 <script type="text/javascr ...

  9. Shell学习小结 - 深入认识变量

    移动端访问不佳,请访问我的个人博客 变量的命名 对于初学者来说,可以简单的理解为,变量就是保存在计算机内存中的一系列的键值对. 列如: str="hello" 这里的str就是变量 ...

  10. mysql中group by存在局限性探讨(待续)

    现在有一个需求:在2018年游戏充值记录表(字段主要有: user_name , money , game_id , 表有6000w行)查找出哪些人在某段日期内累计充值金额在100~500元范围内的, ...