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 ...
随机推荐
- Linux查看本机登陆用户信息(w、who、last和lastlog命令)
w 命令 查看 Linux 服务器上目前已经登录的用户信息 [root@localhost ~]# w :: up :, users, load average:0.00, 0.00, 0.00 US ...
- lvds split两channel输出到一个屏显示
转:https://blog.csdn.net/changqing1990/article/details/81128552 其实之前写过LCD/LVDS的一些时序的基本概念<与LCD移植相关的 ...
- 【前端】vue.js实现输入框绑定
vue.js实现输入框绑定 实现效果如下: 实现代码及注释 <!DOCTYPE html> <html> <head> <title>vue.js数据动 ...
- 设置CentOS7虚拟机使用静态IP上网
一.在VMware里,依次点击”编辑“ - ”虚拟网络编辑器“,如下图,我选择的是NAT模式: 为了能够使用静态IP,这里不要勾选”使用本地DHCP服务将IP分配给虚拟机“这个选项.然后是配置子网ip ...
- Mysql批量更新速度慢的解决方案
批量更新的时候不能用子查询 where shop_orderform_id in( select shop_orderform_id from `shop_orderform` where user_ ...
- Linux 服务器buff/cache清理
使用Top命令查看内存及缓冲区使用情况 当磁盘频繁产生IO时会导致buff/cache占用很高的内存,导致可用物理内存很少 但是当真正需要内存时,缓冲区内存会自动释放. 如果需要清理可以用 cache ...
- HTTP-API-DESIGN 怎样设计一个合理的 HTTP API (一)
这个附件的幻灯片是我最近给团队分享关于设计 HTTP API 的时候,结合 这篇 和我们团队历史上的一些错误,总结出来一些适合内部的经验. 简介. 这次分享主要关注以下几部分: HTTP + JSON ...
- Quartz(自动任务)中的触发器Trigger
1.Quartz中的触发器TriggerJob 包含了要执行任务的逻辑,但是 Job 对何时该执行却一无所知.这个事情留给了 Trigger.Quartz Trigger 继承了抽象的 org.qua ...
- 索引选择性与cardinality
索引选择性 索引选择性是索引基数(cardinality)与表中数据行数(n_row_in_table)的比值,即 索引选择性=索引基数/数据行 其中cardinality是索引中不重复记录的预估值. ...
- maven笔记(3)
项目管理利器(Maven)——Pom.xml解析 <name>项目的描述名</name> <url>项目的地址</url> <descriptio ...