一、采用Java配置类管理Bean
1、创建杀龙任务类 - SlayDragonQuest
2、创建勇敢骑士类 - BraveKnight
3、创建Spring配置类 - SpringConfig
package net.zxj.spring.lesson4;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig {
@Bean // 基于SlayDragonQuest类创建名为slayDragonQuest的Bean
public SlayDragonQuest slayDragonQuest() {
return new SlayDragonQuest();
}
@Bean // 基于BraveKnight类创建名为braveKnight的Bean
public BraveKnight braveKnight() {
BraveKnight braveKnight = new BraveKnight();
braveKnight.setSlayDragonQuest(slayDragonQuest());
return braveKnight;
}
}
4、创建测试类 - TestKnight
package net.zxj.spring.lesson4;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class TestKnight {
private AnnotationConfigApplicationContext context;
@Before
public void init() {
// 基于Spring配置类创建应用容器
context = new AnnotationConfigApplicationContext(SpringConfig.class);
}
@Test
public void testBraveKnight() {
// 根据勇敢骑士类从应用容器里获取勇敢骑士对象
BraveKnight braveKnight = context.getBean(BraveKnight.class);
// 勇敢骑士执行任务
braveKnight.embarkOnQuest();
}
@After
public void destroy() {
// 关闭应用容器
context.close();
}
}
- 运行结果:
二、扩展练习
1、创建拯救少女任务类和拯救少女骑士类
- RescueDamselQuest类
package net.zxj.spring.lesson4;
import net.zxj.spring.lesson3.Quest;
import org.springframework.stereotype.Component;
@Component
public class RescueDamselQuest {
public void embark() {
System.out.println("执行拯救少女任务。");
}
}
- DamselRescuingKnight
package net.zxj.spring.lesson4;
import net.zxj.spring.lesson3.Knight;
import net.zxj.spring.lesson3.Quest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
public class DamselRescuingKnight {
private RescueDamselQuest rescueDamselQuest;
public DamselRescuingKnight(RescueDamselQuest rescueDamselQuest) {
this.rescueDamselQuest = rescueDamselQuest;
}
public void embarkOnQuest() {
rescueDamselQuest.embark();
}
}
2、修改Spring配置类 - 增添拯救少女任务Bean和拯救少女骑士Bean
3、在测试类TestKnight里创建测试方法 - testDamselRescuingKnight()
package net.zxj.spring.lesson4;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class TestKnight {
private AnnotationConfigApplicationContext context;
@Before
public void init() {
// 基于Spring配置类创建应用容器
context = new AnnotationConfigApplicationContext(SpringConfig.class);
}
@Test
public void testDamselRescuingKnight() {
// 根据勇敢骑士类从应用容器里获取拯救少女骑士对象
DamselRescuingKnight damselRescuingKnight = context.getBean(DamselRescuingKnight.class);
// 拯救少女骑士执行任务
damselRescuingKnight.embarkOnQuest();
}
@After
public void destroy() {
// 关闭应用容器
context.close();
}
}
- 运行结果:
4、给任务类与骑士类添加组件注解符
- 任务类: 都加上 @Component注解
- 骑士类:都加上 @Component 和 @Autowired注解,并且删掉了原先的构造方法