初探Spring——利用组件注解符精简Spring配置文件

目录

一、利用组件注解符精简Spring配置文件

  • 配置 - configuration
  • 注解 - annotation

1、创建net.zjs.spring.lesson02包

在这里插入图片描述

2、将lesson01子包的四个类拷贝到lesson02子包

在这里插入图片描述

3、修改杀龙任务类 - SlayDragonQuest

  • 业务Bean的配置可用注解符:@Component - 组件(@Service - 服务、@Repository - 仓库、@ Controller - 控制器)
    在这里插入图片描述
  • @Component(“参数”)——可设置名称,参数对应Spring配置文件里的Bean元素的id,若不设置便默认为类方法名的小写
  • 注:添加组件注解符(@Component):交给Spring容器管理

4、修改救美任务类 - RescueDamselQuest2

在这里插入图片描述

5、修改勇敢骑士类 - BraveKnight

在这里插入图片描述

6、修改拯救少女骑士类 - DamselRescuingKnight

在这里插入图片描述

7、创建Spring配置文件

(1)在resources目录创建xml_annotation子目录

在这里插入图片描述

(2)在xml-annotation子目录里面创建Spring配置文件 - spring-config.xml

在这里插入图片描述

(3)组件扫描:扫描指定包下添加了注解符的类(@Component、@Service、@Repository、@Controller),将其生成Bean对象

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!--组件扫描:扫描指定包下添加注解符的类,将其生成Bean对象-->
    <context:component-scan base-package="net.zjs.spring.lesson02"/>

</beans>

8、创建测试类 - TestKnight

(1)在test/java里创建net.zjs.spring.lesson2包

在这里插入图片描述

(2)在包里创建测试骑士类【TestKnight】

在这里插入图片描述
在这里插入图片描述

package net.zjs.spring.lesson02;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 功能:测试骑士类
 * 作者:zjs
 * 时间:2021/3/17
 */
public class TestKnight {
    private ClassPathXmlApplicationContext context;

    @Before
    public void init(){
        //基于Spring配置创建应用容器
        context=new ClassPathXmlApplicationContext("xml_annotation");
    }
    @Test
    public void testBraveKnight(){
        //根据名称从应用容器里获取勇敢骑士对象
        BraveKnight braveKnight= (BraveKnight) context.getBean("braveKnight");
        //勇敢骑士执行任务
        braveKnight.embarkOnQuest();
    }

    @Test
    public void testDamselRescuingKnight() {
        // 根据名称从应用容器里获取拯救少女骑士对象
        DamselRescuingKnight damselRescuingKnight = (DamselRescuingKnight) context.getBean("damselRescuingKnight");
        // 拯救少女骑士执行任务
        damselRescuingKnight.embarkOnQuest();
    }

    @After
    public void destroy() {
        // 关闭应用容器
        context.close();
        //提示用户
        System.out.println("应用已关闭!");
    }


}

(3)运行测试方法testBraveKnight(),查看结果

  • 显示TestKnight.java中第19行错误
    在这里插入图片描述

  • 更改TestKnignt中19行错误
    在这里插入图片描述

  • 再次运行,查看结果
    在这里插入图片描述

(4)运行测试方法testDamselRescuingKnight(),查看结果

在这里插入图片描述

(5)运行整个测试类,查看效果

在这里插入图片描述

9、如何实现自定义Bean名

(1) 在类前添加@Component注解符,生成的Bean采用默认名称

  • 即类名首字母小写。如果不想采用默认名称,那么通过@Component注解符的参数来制定,比如给BraveKnight类添加注解符@Component(“mike”)或者@Component(value = “mike”):
    在这里插入图片描述

(2)修改测试方法testBraveKnight()

在这里插入图片描述

(3)运行测试方法testBraveKnight(),查看结果

在这里插入图片描述

二、程序优化 - 面向接口

  • Spring框架可以方便地管理Bean及其相互依赖。为了实现松耦合,一般采用面向接口的方式。多种骑士,多种任务,任意搭配。为了实现这个效果,我们应该抽象出两个接口:骑士接口(Knight)和任务接口(Quest)。骑士接口有两个实现类:BraveKnight和DamselRescuingKnight;任务接口有两个实现类:SlayDragonQuest和RescueDamselQuest

1、在src\java\net.zjs.spring.lession02子包中创建任务接口 - Quest

在这里插入图片描述

package net.zjs.spring.lesson02;

/**
 * 功能:任务接口
 * 作者:zjs
 * 时间:2021/3/17
 */
public interface Quest {
    void embark();
}

2、在src\java\net.zjs.spring.lession02子包中创建骑士接口 - Knight

在这里插入图片描述

package net.zjs.spring.lesson02;

/**
 * 功能:骑士接口
 * 作者:zjs
 * 时间:2021/3/17
 */
public interface Knight {
    void embarkOnQuest();
}

3、修改杀龙任务类 - SlayDragonQuest

在这里插入图片描述

4、修改拯救少女人物类 - RescueDamselQuest

在这里插入图片描述

5、修改勇敢骑士类 - BraveKnight

在这里插入图片描述

  • 注意:SlayDragonQuest类改成了Quest接口,这样就可以给该骑士自动装配任何任务(实现了Quest接口的Bean),增加了程序的灵活性。

6、修改拯救少女骑士类 - DamselRescuingKnight

在这里插入图片描述

7、运行测试类 - TestKnight

在这里插入图片描述

三、课堂练习

任务1:两种骑士交换执行任务。

  • 要求勇敢骑士去拯救少女,要求拯救少女骑士去杀龙。

(1)修改勇敢骑士类 - BraveKnight

在这里插入图片描述

(2)修改拯救少女骑士类 - DamselRescuingKnight

在这里插入图片描述

(3)运行测试类 - TestKnight

在这里插入图片描述

任务2、两种骑士都执行两项任务。

  • 要求勇敢骑士先执行杀龙任务,再执行救美任务。
  • 要求救美骑士先执行救美任务,再执行杀龙任务。

(1)修改勇敢骑士类 - BraveKnight

在这里插入图片描述

(2)修改拯救少女骑士类 - DamselRescuingKnight

在这里插入图片描述

(3)运行测试方法 - testBraveKnight()

在这里插入图片描述

(4)运行测试方法 - testDamselRescuingKnight()

在这里插入图片描述

任务3、勇敢骑士完成杀龙任务,勇敢骑士完成救美任务。

  • 将其还原,修改BraveKnight.java
    在这里插入图片描述
  • 修改DamselRescuingKnight.java
    在这里插入图片描述
  • 运行结果
    在这里插入图片描述
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值