SpringInAction--自动化装配Bean(隐式装配)

时间:2023-03-09 15:26:18
SpringInAction--自动化装配Bean(隐式装配)

关于Bean的介绍就具体不多介绍了,,,

Spring在配置时候有三种方案可选

1、在xml中进行显示配置

2、在java中进行显示配置

3、隐式的Bean发现机制和自动装配

今天学习的就是自动化装配Bean

Spring又可以从两个角度来实现自动化装配:

1、组建扫描【component scanning】 spring会自动发现应用上下文所创建的bean

2、自动装配【autowiring】 spring自动满足bean之间的依赖

根据Spring In Action的例子 CD插入到CD播放器中才可以播放。。

既然要有CD那么就先创建一个CD的接口类:

package com.bean.auto;

/**
* Created by IntelliJ IDEA.
* Author XueYuan
* Data 2017/02/21
* Time 20:55
*/
public interface CompactDisc { void play();
}

好了CD接口类创建好了,下面就要选择从众多的CD中选择一个喜欢的歌 那就选择 国荣哥哥的 当年情 吧

package com.bean.auto;

import org.springframework.stereotype.Component;

/**
* Created by IntelliJ IDEA.
* Author XueYuan
* Data 2017/02/21
* Time 20:56
*/ /**
* Bean配置方法:
* |- @Component 注解表示这个类我要把它创建成bean
* |- @Component("XXX") XXX表示bean的标识名字
* |- @Named("XXX") XXX表示bean的标识名字
*/ @Component
public class DangNianQing implements CompactDisc { private String title = "DangNianQing";
private String artist = "张国荣"; public void play() {
System.out.println("Playing " + title + " By " + artist);
}
}

其实这个类中最重要的是  @Component    这个主要的就是告诉你: 我现在是一个变身成bean家族的一员了,下面你可以追我了啊 哈哈哈:)

@Component("XXX")    与  @Named("XXX")   都是一样的作用,他们三个的区别就是

1、使用的  @Component   的时候如果你没有定义一个bean的名字给他的话,他就会默认给你起一个即类名首字母变小些—— dangNianQIng

2、使用 @Component("XXX")   的时候 跟 1 没有多大区别,就是起得名字不一样 ,比如狗蛋啊 二娃啊啥的

3、使用  @Named("XXX")  的时候 使用的是Java依赖注入规范中提供的@Named注解。Spring大肚能容,两种方式都支持,虽然两者有细微的差异,差异在于@Named要求必须起名字,而@Component则不必要,见