全部 android asp.net C/C++ cshap IOS Java javascript nodejs perl php python ruby web容器 其他 前端 数据库 第三方平台 混合式APP 网络 系统 默认分类

隐式的bean发现与自动装配机制

0 164

使用beans.xml文件进行bean的创建和注入通常是可行的,但在便利性上Spring提供了更简单的方法——自动装配

接下来我们假设一个场景:我有若干播放器(MediaPlayer{CD播放器/MP3}),我也有很多媒体文件例如(CompactDisc{CD光盘/MP3文件})。
现在,我们需要创建两个接口MediaPlayer/CompactDisc,然后创建他们的实现CDPlayer/CompactDisc_zhoujielun。注意:CompactDisc_zhoujielun是周杰伦的CD光盘。代码如下:
 1 package com.spring.cd;
 2 
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.stereotype.Component;
 5 
 6 @Component//Spring自动创建bean
 7 public class CDPlayer implements MediaPlayer{
 8     private CompactDisc cd;
 9     
10     @Autowired//表明Spring初始化后尽可能地去满足bean的依赖,在这里它注入了一个CompactDisc的对象
11     public CDPlayer(CompactDisc cd){
12         this.cd=cd;
13     }
14     @Override
15     public void player() {
16         System.out.println("wo yong CD!");
17     }
18 }

当然,我们也可以在创建bean时对它命名,在CDPlayer类中可以体会到。代码如下:

package com.spring.cd;

import org.springframework.stereotype.Component;

@Component("ZhouJieLun")
public class CompactDisc_zhoujielun implements CompactDisc{
	private String title="发如雪";
	private String artist="周杰伦";
	
	@Override
	public void play(){
		System.out.println("播放:"+title+"来自艺术家:"+artist);
	}
}
接下来,我们需要启用组件扫描,组件扫描过程是通过Java代码来定义Spring的装配规则。代码如下:
package com.spring.cd;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@ComponentScan("com.spring.cd") //参数代表当前需要扫描的路径,为空默认为当前包路径
@Configuration("cd")//需要扫描的包名称
//通过java代码定义spring的装配机制
public class CDPlayerConfig {

}

 值得注意的是,真正的实现过程与代码主体非常复杂,@Component,@ComponScan,@Autowired,@Comfiguration等注解的使用方法与参数是多样的。

为了实现可视化,我们新建一个JUnit4测试。代码如下:
package com.spring.cd;

import static org.junit.Assert.*;
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;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CDPlayerConfig.class)
public  class CDPlayerTest{
	@Autowired
	private CompactDisc cd;
	@Autowired
	private MediaPlayer player;
	@Test
	public void test() {
		player.player();
		cd.play();
		assertNotNull(cd);
		assertNotNull(player);
	}

}
上下文创建成功。

热爱分享拒绝拿来主义,博客精神永存——cvrigo

    2016-11-09 00:19:44

热忱回答0

  • 加入年费大会员(20每年)
  • 热门标签

    猜你喜欢

    1. ssh启动报错:org.dom4j.DocumentException: Connection timed out: connect Nested exception: Connection timed out: connect
    2. 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题
    3. 基础算法(javascipt)总结
    4. Java 线程 — ConcurrentLinkedQueue
    5. Java线程间通信之wait/notify
    6. Spring Session实现分布式session的简单示例
    7. 极光推送-Java后台实现方式一:Http API
    8. Struts2初步接触
    9. IDEA2017使用Maven方式配置Mybatis-Generator
    10. java源码学习(四)ArrayList

    衣食父母

    最近热帖

    1. 不带插件 ,自己写js,实现批量上传文件及进度显示 5
    2. 连载《一个程序猿的生命周期》-《发展篇》 - 10.欠薪的高薪和稳定的相对低薪,你会选择哪个? 6
    3. android网页分享到朋友圈问题求助? 6
    4. vue实现标签云效果 6
    5. 如何在前端模版引擎开发中避免使用eval函数 6
    6. 从String类型字符串的比较到StringBuffer和StringBuilder 6
    7. php利用gd实现图片的边框 6
    8. 谈谈java中遍历Map的几种方法 7
    9. angular之$watch、$watchGroup、$watchCollection 7
    10. ASP.NET MVC5(五):身份验证、授权 7

    随机文章

    1. 跟我一起读postgresql源码(二)——Parser(查询分析模块)
    2. Linux下Session丢失原因
    3. Hibernate一对多配置
    4. Day04 - Python 迭代器、装饰器、软件开发规范
    5. QCustomplot使用分享(一) 能做什么事