初探Spring——采用Java配置类管理Bean

上一讲,采用注解配置类取代了Spring配置文件,这一讲,我们来学习如何采用Java配置类管理Bean。

一、采用Java配置类管理Bean

1、在net.lhf.spring包里创建lesson04子包

java项目配置中心选什么_java项目配置中心选什么

2、在lesson04子包里创建杀龙任务类 - SlayDragonQuest

java项目配置中心选什么_Bean管理_02


java项目配置中心选什么_Java配置类_03


代码如下:

package net.lhf.spring.lesson04;

/**
 * 功能:杀龙任务类
 * 作者:李红芙
 * 日期:2021年03月24日
 */
public class SlayDragonQuest {
    public void embark() {
        System.out.println("执行杀龙任务。");
    }
}

注意:没有添加@Component注解符声明Bean

3、在lesson04子包里创建勇敢骑士类 - BraveKnight

java项目配置中心选什么_Java配置类_04


java项目配置中心选什么_Java配置类_05


代码如下:

package net.lhf.spring.lesson04;

/**
 * 功能:勇敢骑士类
 * 作者:李红芙
 * 日期:2021年03月24日
 */
public class BraveKnight {
    private SlayDragonQuest slayDragonQuest;

    public void setSlayDragonQuest(SlayDragonQuest slayDragonQuest) {
        this.slayDragonQuest = slayDragonQuest;
    }

    public void embarkOnQuest() {
        slayDragonQuest.embark();
    }
}

注意:没有添加@Component注解符声明Bean;没有使用@Autowired注解符注入Bean

4、在lesson04子包里创建Spring配置类 - SpringConfig

java项目配置中心选什么_Java配置类_06


java项目配置中心选什么_java项目配置中心选什么_07


代码如下:

package net.lhf.spring.lesson04;

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

/**
 * 功能:Spring配置类
 * 作者:李红芙
 * 日期:2021年03月24日
 */
@Configuration // 表明是Spring配置类
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;
    }
}

使用@Configuration注解表明当前类是一个配置类,这意味着这个类里可能有0个或多个@Bean注解,此处没有使用包扫描,因为所有的Bean都在此类中定义了。
使用@Bean注解声明当前方法的返回值是一个Bean,而Bean的名称就是方法名

5、创建Spring配置文件

java项目配置中心选什么_Spring_08

代码如下:

<?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">

    <bean id="slayDragonQuest" class="net.lhf.spring.lesson04.SlayDragonQuest"/>
    <bean id="braveKnight" class="net.lhf.spring.lesson04.BraveKnight">
        <property name="slayDragonQuest" ref="slayDragonQuest"/>
    </bean>

</beans>

6、创建测试类 - TestKnight

首先创建一个lesson04包,在包里新建测试类 - TestKnight

java项目配置中心选什么_@Configuration_09


java项目配置中心选什么_java项目配置中心选什么_10


java项目配置中心选什么_Spring_11


代码如下:

package net.lhf.spring.lesson04;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * 功能:测试骑士类
 * 作者:李红芙
 * 日期:2021年03月24日
 */
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();
    }
}

7、运行测试方法testBraveKnight()

java项目配置中心选什么_java项目配置中心选什么_12


Spring配置文件我是创建到xmlconfig配置目录下的。

java项目配置中心选什么_java项目配置中心选什么_13