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 中
SpringInAction--自动化装配(显示装配之 java注解配置)的更多相关文章
- Spring框架入门之基于Java注解配置bean
Spring框架入门之基于Java注解配置bean 一.Spring bean配置常用的注解 常用的有四个注解 Controller: 用于控制器的注解 Service : 用于service的注解 ...
- Java注解配置
Java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明.配置的功能.注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用.包含在 java.lang.annota ...
- IDEA+Tomcat+Maven+SpringMVC基于Java注解配置web工程
1.在IDEA中新建Maven工程,使用archetype. 2.添加Maven依赖 <dependencies> <dependency> <groupId>ju ...
- Spring基础篇——通过Java注解和XML配置装配bean
自动化装配的确有很大的便利性,但是却并不能适用在所有的应用场景,比如需要装配的组件类不是由自己的应用程序维护,而是引用了第三方的类库,这个时候自动装配便无法实现,Spring对此也提供了相应的解决方案 ...
- Spring基础篇——通过Java注解和XML配置装配bean(转载)
作者:陈本布衣 出处:http://www.cnblogs.com/chenbenbuyi 本文版权归作者和博客园共有,欢迎转载分享,但必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留 ...
- [原创]java WEB学习笔记103:Spring学习---Spring Bean配置:基于注解的方式(基于注解配置bean,基于注解来装配bean的属性)
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 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 ...
- 使用Java注解自动化处理对应关系实现注释代码化
概述 假设我们要从一个 ES 索引(相当于一张DB表)查询数据,ES表有 biz_no, type, status 等字段, 而应用对象则有属性 bizNo, type, status 等.这样,就会 ...
- Spring随笔-bean装配-自动装配
Spring提供了三种装配方式 1.XML文件进行显式装配 2.java中进行显示装配 3.自动化装配 1.自动化装配的两种实现方式 1.组件扫描:Spring会自动发现应用上下文中创建的bean 2 ...
随机推荐
- redis 简单命令操作
一.概述: 在该系列的前几篇博客中,主要讲述的是与Redis数据类型相关的命令,如String.List.Set.Hashes和Sorted-Set.这些命令都具有一个共同点,即所有的操作都是针对与K ...
- python3_UUID模块详解
1.知识背景 UUID是128位的全局唯一标识符,通常有32字节的字母表示.它可以保证时间和空间的唯一性. UUID——Universally unique identifier 在python中叫U ...
- JS的魅力
一.初探JavaScript魅力 基本知识: JavaScript是什么 网页特效原理 -JavaScript就是修改样式 编写JS流程 - 布局:HTML + CSS - 属性:确定修改哪些属性 - ...
- XPO开发指南简要
一.XPO简介: XPO即eXpress Persistent Objects for .NET,现在这里介绍的版本是1.5. XPO在应用程序代码和数据库之间扮演了一个中间层的角色,简单而言,就是将 ...
- hadoop cgroup+container配置
配置container-executor.cfg vim etc/hadoop/container-executor.cfg yarn.nodemanager.linux-container-exec ...
- 20145302张薇《Java程序设计》第八周学习总结
20145302 <Java程序设计>第八周学习总结 教材学习内容总结 第十五章 日志API简介 使用日志的起点是Logger类,要取得Logger类,必须使用Logger的静态方法get ...
- 20145324Java课程总结
20145324课程总结 ●每周读书笔记链接总汇 [第一周](http://www.cnblogs.com/SJZGM10/p/5246770.html) 第二周(不小心删了) [第三周](http: ...
- Jquery 复制功能
使用clipboardjs插件实现鼠标点击复制功能: 官网:https://clipboardjs.com/ 使用示例: 1.引入 <script type="text/javascr ...
- Shell学习小结 - 深入认识变量
移动端访问不佳,请访问我的个人博客 变量的命名 对于初学者来说,可以简单的理解为,变量就是保存在计算机内存中的一系列的键值对. 列如: str="hello" 这里的str就是变量 ...
- mysql中group by存在局限性探讨(待续)
现在有一个需求:在2018年游戏充值记录表(字段主要有: user_name , money , game_id , 表有6000w行)查找出哪些人在某段日期内累计充值金额在100~500元范围内的, ...