关闭

第二章 装配Bean之spring配置可选方案及自动化装配bean

198人阅读 评论(0) 收藏 举报
分类:

2.1 Spring配置的可选方案

主要有三种:

a)在xml中进行显式配置;

b)在java中进行显式配置;

c)隐式的bean发现机制和自动装配;

并没有规定说一定要用某一种方案,三种方案根据情况以及个人喜好而决定,也可以混合使用。但推进:尽可能使用自动配置的机制。显式配置越少越好。但当你必须使用显式配置的时候,推荐使用类型安全并且比xml更加强大的JavaConfig.最后只有当你想要使用便利的xml命名空间,并且在JavaConfig中没有同样的实现时才应该使用xml.

2.2 自动化装配bean.

spring从两个角度来实现自动化装配:

1.组件扫描(component scanning):spring会自动发现应用上下文所创建的bean.

2.自动装配(autowiring):spring自动满足spring之间的依赖。

定义CD的一个接口以及带有@Component注解的CompactDisc实现类SgtPeppers:


package ssoundsystem;
public interface CompactDisc{
    void play();
}package soundsystem;

import org.springframework.stereotype.Component;

@Component
public class SgtPeppers implements CompactDisc {
	private String title = "Sgt. Peppert's Lonely Hearts Club Band";
	private String artist = "The Beatles";
	public void play() {
		// TODO Auto-generated method stub
		System.out.println("Playing "+title+" by "+artist);
	}
}

定义一个java配置类以及xml配置文件,用于自动扫描组件。

package soundsystem;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration //使用java配置类
@ComponentScan(basePackages={"soundsystem"})//多个可用逗号隔开,不写这个默认当前包
//@ComponentScan(basePackageClasses{CDPlayer.class}) 已类所在的包为基础包,多个可用逗号分开
public class CDPlayerConfig {
}


	
	

定义一个Player接口及实现类及测试文件
package soundsystem;

public interface MediaPlayer {
	void play();
}package soundsystem;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component("aa")
public class CDPlayer implements MediaPlayer {
	//@Autowired
	private CompactDisc cd;
	@Autowired
	public CDPlayer(CompactDisc cd){
		System.out.println("CDPlayer");
		this.cd = cd;
	}
	public void play() {
		// TODO Auto-generated method stub
		cd.play();
	}
	@Autowired
	public void insertCd(CompactDisc cd){
		System.out.println("insertCd");
		this.cd = cd;
	}
}package soundsystem;

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 cdShouldNotBeNull(){
		cd.play();
	}
	@Test
	public void testPlay(){
		player.play();
	}
}
总结:
1.@Autowired可以用在构造器,属性,任何方法前,spring在初始化bean的时候会尽可能去满足bean的依赖,每个使用了该注解的方法都会执行,但一般注入采用一种就可以。
2.如果没有匹配的bean,那么在上下文创建的时候就会抛异常,为了避免,可将@Autowired的required的属性设为false,但你代码如果没判空,可能会出现空指针。
3.@Autowired默认按byType自动注入,就是说如果,注入的时候根据type去寻找,找不到抛找不到异常;找到一个则注入;找到多个则再根据名字去找,如果根据名字(字段名)找不到则抛找到多个异常,找到则注入;
4.@Qualifier 指定注入 Bean 的名称 当使用该注解时,会直接根据该名字去寻找,不会根据类型去找,找到一个则注入。找不到则抛异常,找到多个也抛。该作用域比字段名大。
4.@Component如果不指明id,则会以类名作为id;但书上却说是默认将类名的第一个字母变成小写??

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Spring自动装配Bean属性的四种方式

什么是自动装配装? 自动装配有什么好处? 如何使用自动装配?
  • wang465745776
  • wang465745776
  • 2016-04-05 20:29
  • 3580

Spring Bean自动装配和注解注入

问题描述 如果一个Bean需要注入很多属性,每个属性都要显示注入,就会显得很麻烦。 解决方案 让Ioc容器自动为Bean指定引用。 方法之一---在XML配置文件实现自动装配 Car.java pac...
  • zhangzeyuaaa
  • zhangzeyuaaa
  • 2014-03-30 15:25
  • 8505

简化Spring的XML配置(一)——自动装配bean属性

对于小的程序来说,在XML中配置的bean数目很少。但是如果对于一个大一点的应用,需要在XML中配置很多的bean。那么有没有简化XML配置的方法呢,Spring为我们提供了这个机制,现在就讲几种简化...
  • Trigl
  • Trigl
  • 2016-01-07 23:21
  • 2260

《Spring in Action》第二章--自动化装配bean+音响系统例子的实现

实验环境: 1、eclipse开发工具 https://www.eclipse.org/downloads/ 2、Java JDK(IDE有自己的编译环境,所以只需安装JRE即可) http...
  • zd454909951
  • zd454909951
  • 2017-10-20 11:41
  • 127

Spring实战(第四版)——第二章 装配Bean

Spring实战(第四版)——第二章 装配Bean 本章主要内容: 声明bean 构造器注入和Setter方法注入 装配bean 控制bean的创建和销毁 在Spring中,对象无需自己...
  • u012757588
  • u012757588
  • 2017-01-05 09:33
  • 365

spring笔记:第二章(通过javaconfig类装配bean)

javaconfig装配bean
  • a85820069
  • a85820069
  • 2016-06-24 23:33
  • 262

Spring 如何使用自动化装配 bean?

Spring 提供了三种主要的装配机制: 在 XML 中进行显示配置; 在 Java 中进行显示配置; 隐式的 bean 发动机制和自动装配。 Q:应该选择哪一种装配机制? A:以上三种配置方案,可...
  • tinyDolphin
  • tinyDolphin
  • 2017-07-23 21:29
  • 238

spring的自动化装配bean

大家好,我是你们酷酷的奇峰,最近对spring的学习发现了一个问题,就是我们在配置一个最基本的springMvc框架的时候,总会出现很多莫名其妙的问题,但是还不知道问题 来自于哪里,因此就一次又一次...
  • qq_35146979
  • qq_35146979
  • 2017-11-12 15:44
  • 61

Spring journey -- 自动化装配 bean Fir

Spring 从两个角度实现自动化装配: 组件扫描(component scanning)Spring 会自动发现应用上下文中所创建的 Bean;自动装配(autowiring) Spring 自...
  • stanxl
  • stanxl
  • 2017-02-21 22:51
  • 315

【Spring】【笔记】《Spring In Action》第二章 Bean装配

2.1 声明Bean 2.1.1 创建Spring配置 XML文件方式注解方式      在XML文件中声明Bean时,Spring配置文件的根元素是来源于Spring beans 命名空间所定义的...
  • KEY0323
  • KEY0323
  • 2016-05-22 16:50
  • 483
    个人资料
    • 访问:824次
    • 积分:104
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:3篇
    • 译文:0篇
    • 评论:0条
    文章分类