打印机原理--如果运用Spring实现?

打印机原理–如果运用Spring实现?

依赖注入思想的综合示例,共三大步骤

如何开发一个打印机?
可灵活配置使用彩色墨盒或灰色墨盒
可灵活配置打印页面的大小
打印机功能的实现依赖于墨盒和纸张
 
步骤
定义墨盒和纸张的接口标准
使用接口标准开发打印机
组装打印机
运行打印机

需求说明
自己动手实现打印机功能
使用Spring IoC实现墨盒和纸张的灵活替换

第一大步骤:

三个包{ink墨盒;page纸张;print打印机}

ink包 ==>墨盒颜色

进行定义墨盒颜色的规范,通过传入【int r, int g, int b】进行定义墨盒颜色。

package com.company.ioc.demo2.ink;

/**
 * @author Johnny
 * 墨盒接口
 */
public interface Ink {

    /**
     * @param r 红色
     * @param g 绿色
     * @param b 蓝色
     * @return 色值#FFFFFF
     */
    public String getColor(int r, int g, int b);
}

彩色墨盒的实现类 ==>实现接口的抽象方法(返回为彩色打印)

package com.company.ioc.demo2.ink.impl;
import com.company.ioc.demo2.ink.Ink;

/**
 * @author Johnny
 * 彩色墨盒
 */
public class ColorInk implements Ink {
    /**
     * 彩色墨盒
     * @param r 红色
     * @param g 绿色
     * @param b 蓝色
     * @return
     */
    @Override
    public String getColor(int r, int g, int b) {
        return "彩色打印";
    }
}

黑白墨盒实现类GreyInk ==>实现接口的抽象方法(返回为黑白打印)

package com.company.ioc.demo2.ink.impl;

import com.company.ioc.demo2.ink.Ink;

/**
 * @author Johnny
 * 黑白墨盒
 */
public class GreyInk implements Ink {

    /**
     * 黑白墨盒
     * @param r 红色 
     * @param g 绿色
     * @param b 蓝色
     * @return
     */
    @Override
    public String getColor(int r, int g, int b) {
        return "黑白打印";
    }
}

page包 ==>纸张大小的选择

通过page接口,进行定义纸张的规范的抽象方法。

package com.company.ioc.demo2.page;

/**
 * @author Johnny
 * 纸张接口
 */
public interface Page {

    /**
     * @return 纸张的大小
     */
    public String getSize();
}

A4纸实体类,实现page的抽象方法,返回A4纸;

package com.company.ioc.demo2.page.impl;

import com.company.ioc.demo2.page.Page;

/**
 * @author Johnny
 * A4纸张
 */
public class A4Page implements Page {

    @Override
    public String getSize() {
        return "A4纸";
    }
}

B5纸实体类,实现page的抽象方法,返回B5纸;

package com.company.ioc.demo2.page.impl;

import com.company.ioc.demo2.page.Page;

/**
 * @author Johnny
 * B5纸张大小
 */
public class B5Page implements Page {

    @Override
    public String getSize() {
        return "B5纸";
    }
}

print类 == >打印方法的实现

该类有两个私有属性:ink(墨盒)和page(纸张)。类中还定义了一个print方法,用于打印墨盒颜色和纸张大小。此外,类中还包含了set和get方法,用于设置和获取墨盒和纸张的属性。

package com.company.ioc.demo2.print;

import com.company.ioc.demo2.ink.Ink;
import com.company.ioc.demo2.page.Page;

/**
 * @author Johnny
 * 打印机类
 */
public class Print {

    /**
     * 墨盒接口
     */
    private Ink ink;

    /**
     * 纸张
     */
    private Page page;

    /**
     * 打印方法
     */
    public void print(int r, int g, int b){
        System.out.println("纸张大小"+page.getSize()+",颜色:"+ink.getColor(r,g,b));
    }

    /*set、get方法*/
    public Ink getInk() {
        return ink;
    }

    public void setInk(Ink ink) {
        this.ink = ink;
    }

    public Page getPage() {
        return page;
    }

    public void setPage(Page page) {
        this.page = page;
    }
}

第二大步骤:

配置头部文件

在applicationContext2.xml

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

头部信息的意义是:

<beans>:这是Spring框架中定义bean的根元素。它告诉Spring这是一个包含bean定义的XML文件。


xmlns="http://www.springframework.org/schema/beans":这个属性定义了Spring beans schema的命名空间。这个命名空间告诉Spring解析文件中使用的bean标签和其他相关元素的含义。

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance":这个属性定义了XML Schema Instance (XSI) schema的命名空间。这个命名空间提供了对XML文件中使用的schema位置的引用。

xsi:schemaLocation="http://www.springframework.org/schema/beans 这个属性指定了Spring beans schema的位置。告诉Spring如何解析文件中的bean定义,确保它们符合Spring框架的规范。

通过依赖注入思想,先将被依赖的墨盒、纸张,进行组件配置

id属性定义了这个bean的唯一标识符,可以被其他bean引用。
class属性指定了这个bean的类路径。
<property>标签用于设置打印机的属性。
name属性指定了要设置的属性名称。
ref属性指定了要注入到该属性中的bean的id。

使用了XML配置文件来定义和管理组件。

在Spring框架中,IoC容器负责创建、配置和管理对象的生命周期和依赖关系。这里的关键是标签,它用于定义一个组件(例如墨盒、纸张或打印机)及其属性

 <!--组件:1墨盒 彩色-->
    <bean id="color" class="com.company.ioc.demo2.ink.impl.ColorInk"></bean>
    <!--组件:1墨盒 黑白-->
    <bean id="grey" class="com.company.ioc.demo2.ink.impl.GreyInk"></bean>

    <!--组件:2纸张-->
    <bean id="a4" class="com.company.ioc.demo2.page.impl.A4Page"></bean>
    <bean id="b5" class="com.company.ioc.demo2.page.impl.B5Page"></bean>

    <!--组件:3打印机-->
    <bean id="print" class="com.company.ioc.demo2.print.Print">
        <property name="ink" ref="grey"></property>
        <property name="page" ref="a4"></property>
    </bean>

第三大步骤:

打印测试类PrintTest:使用Spring框架的ClassPathXmlApplicationContext从类路径下的XML配置文件中加载bean,然后获取一个Print类型的bean实例,并调用其print方法。

package com.company.ioc.test;

import com.company.ioc.demo2.print.Print;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author Johnny
 * 打印测试类
 */
public class PrintTest {
    @Test
    public void print(){
        //得到上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext2.xml");
        //通过上下文对象,得到打印机对象
        Print print = context.getBean(Print.class);
        //调用打印的方法
        print.print(10,20,30);
    }
}

结果显示
在这里插入图片描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot Actuator是一个用于监控和管理Spring Boot应用程序的模块,它提供了一组内置的端点(endpoints)和监控指标(metrics)来帮助开发人员了解和管理应用程序的运行状态。下面是spring-boot-starter-actuator底层实现原理的简要说明: 1. 自动配置spring-boot-starter-actuator模块通过自动配置机制与Spring Boot应用程序集成。它依赖于Spring Boot的自动配置功能,根据类路径中的依赖项以及应用程序的配置来自动配置Actuator模块。 2. 端点(Endpoints):Actuator通过提供一系列预定义的端点,使开发人员能够获取与应用程序相关的信息。例如,/health端点用于检查应用程序的健康状况,/info端点用于获取应用程序的自定义信息,/metrics端点用于查看应用程序的指标数据等等。这些端点可以通过HTTP请求访问,并返回相应的数据。 3. 端点暴露:Actuator模块默认会将一些常用的端点暴露出来,以便可以通过HTTP请求访问它们。你也可以通过配置来选择性地启用或禁用具体的端点,并可以自定义端点的访问路径。 4. 监控指标(Metrics):Actuator还提供了一套监控指标,用于测量和记录应用程序的运行状态和性能数据。它可以集成多种监控系统(如Prometheus、Graphite等),并提供了一个统一的接口来访问这些指标。Actuator会自动收集和公开一些常用的指标,同时也支持自定义指标的收集和公开。 5. 扩展性:Actuator模块提供了扩展机制,使开发人员可以自定义和添加自己的端点和指标。你可以通过实现特定的接口或注解来创建自定义端点,并使用Actuator的扩展点机制将其集成到应用程序中。 总之,spring-boot-starter-actuator底层实现原理主要是通过自动配置、点和指标的暴露,以及与监控系统的集成来提供对Spring Boot应用程序的监控和管理功能。它的设计目标是简化开发人员对应用程序运行状态的监控和管理,并提供了一套易于使用和扩展的接口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值