装配(wiring):创建应用对象之间协作关系的行为。这是依赖注入的本质。

Spring配置的可选方案

  Spring提供了三种装配机智:

    1)在XML中进行显示装配

    2)在java中进行显示装配

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


自动化装配

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

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

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

  创建可被发现的bean

  案例:使用CD与CD播放器来实现为什么有注入跟依赖。

  CD:作为一个接口,定义了CD播放器对CD的一系列操作,同时将CD播放器与CD本身的耦合降到最低

public interface CompactDisc {
void play();
}

  CD的具体实现:

  注:@Component。这个注解表明该类会作为组件类,并告知Spring要为这个类创建bean。

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

  配置组件扫描类:

  注:@ComponentScan,该注解会默认扫描配置类的包及其子包下所有带有@Component的类

    如果使用XML格式的话使用:<context: component-scan>元素

@ComponentScan
@Configuration
public class CDPlayerConfig {
}

  测试类代码:

  注:@ContextConfiguration会告诉它需要在CDPlayerConfig中加载配置,而CDPlayerConfig包含注解@ComponentScan,会对其包及其子包下的所有带有@Component类扫描,并为其生成bean

@ContextConfiguration(classes = CDPlayerConfig.class)
public class CDplayerTest { @Autowired
private CompactDisc compactDisc; @Test
public void Test() {
compactDisc.play();
}
}

  为组件扫描的bean命名

  Spring应用上下文中所有的bean都会给定一个ID。默认是小写类名。

  若想改变这个ID:只要修改注解即可

@Component("myselfBean")
public class SgtPeppers implements CompactDisc {
。。。
}

  设置组件扫描的基础包

    我们目前没有为@ComponentScan设置任何属性,默认会以配置类所在的包为基础包来扫描组件。

    可以通过以下设置扫描包名称:

@Configuration
@ComponentScan("com")
public class CDPlayerConfig {
}

    若想指明基础包:

@Configuration
@ComponentScan(basePackages = "com")
public class CDPlayerConfig {
}

    还可以扫描多个基础包:

@Configuration
@ComponentScan(basePackages = {"com","cn"})
public class CDPlayerConfig {
}

    还提供了另一种方法,将指定为包中所包含的类或接口:

    注:可以为一定要扫描的包中创建一个专门用于扫描的组件类,

@Configuration
@ComponentScan(basePackageClasses = {CDPlayerConfig.class, Test.class})
public class CDPlayerConfig {
}

  通过为bean添加注解实现自动装配

    自动装配:Spring自动满足bean依赖的一种方式。可以借助@Autowired实现自动装配。

@Component
public class CDPlayer implements MediaPlayer{
@Autowired
private CompactDisc compactDisc; public void play() {
compactDisc.play();
}
}

通过java代码装配bean

创建配置类

  注:@Configuration表明该类是一个配置类,该类应该包含Spring应用上下文中如何创建bean的细节。

@Configuration
public class CDPlayerConfig {
}

声明简单的bean

  注:@Bean会告诉Spring返回的对象是Spring应用上下文的bean。@Bean的name属性可以设置其名称,默认情况下名称与方法名一致。

@Configuration
public class CDPlayerConfig {
@Bean
public CompactDisc getCompactDisc() {
return new SgtPeppers();
}
}

XML格式的就不在记录

最新文章

  1. mysql深入浅出的笔记(存储过程一)
  2. C语言学习002:第一个完整的C程序代码
  3. There is already an open DataReader associated with this Command which must be closed first.&quot; exception in Entity Framework
  4. wamp2.5 不能运行在win2003的解决方法
  5. java实现身份证校验
  6. nm命令中符号类型详解
  7. CSS控制文本超出后隐藏并用省略号代替
  8. 123 A. Prime Permutation
  9. oracle的下载地址以及步骤
  10. XSS SQL CSRF
  11. MediaManager配置公网访问功能
  12. UOJ#219/BZOJ4650 [NOI2016]优秀的拆分 字符串 SA ST表
  13. exit(0)与exit(1)、return的区别
  14. for和while循环的区别
  15. shell脚本 ------ 输出带颜色的字体
  16. 【BZOJ】1013 [JSOI2008]球形空间产生器sphere(高斯消元)
  17. R ggplot2 线性回归
  18. OpenWrt架设nginx php网站
  19. vue 与jq 的对比
  20. lda:变分的推导

热门文章

  1. for循环执行流程
  2. iOS_CLLocation定位
  3. k-近邻算法 标签分类
  4. Go goroutine (协程)
  5. 初识Spring security-无Security的SpringMVC
  6. 4.JDBC编程
  7. CentOS防火墙iptables-config的相关配置参数详解
  8. sql server deadlock problem
  9. 按F12 IE浏览器的开发工具打不开解决方法
  10. Python之异常总结