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

341人阅读 评论(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 {
}
<?xml version="1.0" encoding="UTF-8"?>
定义一个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;但书上却说是默认将类名的第一个字母变成小写??

查看评论

Spring Boot自动化配置的利弊及解决之道

Spring Boot中的双刃剑:自动化配置 在之前发布的Spring Boot基础教程系列文章中,我们通过各种功能性示例体验了Spring Boot的自动化配置给我们所带来的超便利的新开发方式。但是...
  • dyc87112
  • dyc87112
  • 2017-06-26 14:11:33
  • 2129

spring boot自动化配置原理

spring boot简化开发利器——autoconfigure相关原理。
  • BuquTianya
  • BuquTianya
  • 2017-08-19 19:19:04
  • 1939

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

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

Spring装配bean的三种方法:自动化装配,java代码装配,XML装配及它们的混合使用

一、自动化装配        首先,把可能被装配的类声明为组件类,告知spring要为这个类创建bean如:                     import org.springframewor...
  • qq_37372007
  • qq_37372007
  • 2017-07-31 00:38:45
  • 437

spring--装配bean

众所周知,spring最基本的功能就是用来管理bean,spring为我们提供了三种装配bean的方式: 1. XML显式配置 2. Java显式配置 3. 组件扫描和自...
  • xingtingshu
  • xingtingshu
  • 2016-08-20 14:35:43
  • 891

【spring】1、三种装配bean的方式

【spring】1、三种装配bean的方式 创建应用对象之间协作关系的行为通常称为装配,这也是依赖注入(DI)的本质 spring有如下三种装配bean的方法 在XML中进行显式配置 在Ja...
  • u011719271
  • u011719271
  • 2016-12-14 23:51:57
  • 4651

《Spring实战》学习笔记-第二章:装配Bean

创建应用对象之间协作关系的行为通常被称作装配(Wiring),这也是依赖注入的本质。声明Bean创建Spring配置Spring容器提供了两种配置Bean的方式,其一是使用XML文件作为配置文件,其二...
  • bruce_6
  • bruce_6
  • 2016-01-06 21:37:05
  • 1390

spring入门(8)--装配Bean之自动装配

Spring_Autowiring collaborators 在Spring3.2.2中自动装配类型,分别为:no(default)(不采用自动装配)、byName,byType,construc...
  • sgx425021234
  • sgx425021234
  • 2013-04-25 21:46:46
  • 4864

Spring的三种装配Bean的方式

Spring的三种装配Bean的方式   一.自动扫描+自动装配 适用情况:简单bean,初始化不需要基本bean之外的其他参数,无参构造函数或者仅需要其他bean,如果需要其他bean作为属性...
  • java_hxc_sz
  • java_hxc_sz
  • 2017-02-04 16:43:16
  • 1252
    个人资料
    等级:
    访问量: 1407
    积分: 109
    排名: 125万+
    文章存档