装配Bean

Spring配置的可选方案

  • 隐式的bean发现机制和自动装配。
  • 在Java中进行显示配置。
  • 在XML中进行显示配置。

1.自动化装配bean

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

  • 组件扫描(component scanning):Spring会自动发现应用上下文中所创建的bean。
  • 自动装配(autowiring):Spring自动满足bean之间的依赖。

组件扫描

1、创建接口

1
2
3
4
5
package com.ql;

public interface CompactDisc {
void play();
}

2、创建实现类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.ql;

import org.springframework.stereotype.Component;

/**
* @Component 作为组件类
*/
//@Component
@Component("otherName")
public class SgtPeppers implements CompactDisc {

private String title = "Sgt.Pepper's Lonely Hearts Club Band";
private String artist = "The Beatles";

@Override
public void play() {
System.out.println("Playing " + title + "by " + artist);
}
}

3、启动组件扫描

  • 3.1、 通过JavaConfig启动组件扫描
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.ql;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
* @ComponentScan 启动组件扫描
* 扫描该包及其子包
*/
@Configuration
//@ComponentScan
//@ComponentScan("com.ql")
//@ComponentScan(basePackages = {"com.ql","com.ql2"})
@ComponentScan(basePackageClasses = {SgtPeppers.class, DVDPlayer.class})
public class CDPlayerConfig {
}
  • 3.2、通过XML启动组件扫描
1
<context:component-scan base-package="com.ql"/>

自动装配

1、@Autowired注解通过构造器注入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.ql;

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

public class CDPlayer implements MediaPlayer {

private CompactDisc compactDisc;

@Autowired
public CDPlayer(CompactDisc compactDisc) {
this.compactDisc = compactDisc;
}

@Override
public void play() {

}
}

2、@Autowired注解任意方法注入:

1
2
3
4
@Autowired
public void CompactDisc(CompactDisc compactDisc) {
this.compactDisc = compactDisc;
}

2.Java配置bean

1、创建配置类并声明简单的bean

1
2
3
4
5
6
7
8
9
10
package com.ql;

@Configuration
public class CDPlayerConfig {

@Bean
public SgtPeppers sgtPeppers() {
return new SgtPeppers();
}
}

2、借助JavaConfig实现注入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@Configuration
public class CDPlayerConfig {

@Bean
public SgtPeppers sgtPeppers() {
return new SgtPeppers();
}

/*
*JavaConfig实现注入
*/
@Bean
public CDPlayer cdPlayer() {
return new CDPlayer(sgtPeppers());
}

/*
* 推荐方式
* 需要注入的bean不需要声明在同一个配置类中
* 实现了DI功能
*JavaConfig实现注入
*/
@Bean
public CDPlayer cdPlayer(CompactDisc compactDisc) {
return new CDPlayer(compactDisc);
}
}

3.通过XML配置bean

最为简单的XML配置

1
2
3
4
5
6
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

1、声明一个简单的bean

1
<bean id="SgtPeppers" class="com.ql.SgtPeppers"/>

2、借助构造器注入初始化bean

  • <constructor-arg>元素。
  • 使用Spring 3.0 引入的c-命名空间。
1
2
3
4
<!-- <constructor-arg>元素 -->
<bean id="cdPlayer" class="com.ql.CDPlayer">
<constructor-arg ref="SgtPeppers"/>
</bean>
1
2
<!-- c-命名空间 -->
<bean id="cdPlayer" class="com.ql.cdPlayer.CDPlayer" c:cd-ref="SgtPeppers"/>

以上

LeoQin wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
0%