依赖注入之setter注入---只需修改配置,电脑就可以安装不同的打印机;读取properties配置文件并创建实例;实现不采用new的方式直接实例化对象

1、项目截图

2、黑白打印机类

package com.example.demo.printer;

public class GrayPrinter implements Printer{

    @Override
    public void init() {
        System.out.println("启动打印机");
    }

    @Override
    public void print(String txt) {
        System.out.println("打印黑白文字:".concat(txt));
    }
}

3、彩色打印机类

package com.example.demo.printer;

public class ColorPrinter implements Printer {
    @Override
    public void init() {
        System.out.println("启动彩色打印机!");
    }

    @Override
    public void print(String txt) {
        System.out.println("打印彩色文字:".concat(txt));
    }
}

4、电脑

package com.example.demo.printer;

/**
 * Created by Admin on 2018/5/8.
 */
public class Computer {

    Printer p;

    public void printTxt(String txt){
        p.init();
        p.print(txt);
    }

    public Printer getP() {
        return p;
    }

    public void setP(Printer p) {
        this.p = p;
    }
}

5、配置文件

printer = com.example.demo.printer.ColorPrinter

配置文件的创建:  

6、读取bean配置并创建实例类

package com.example.demo.printer;

import java.io.IOException;
import java.util.Properties;

public class GetBeans {
    private static Properties p = new Properties();
    static{
        try{
            //读取bean配置文件
            p.load(TestComputer.class.getResourceAsStream("/bean.properties"));
        }catch(IOException e){
            System.out.println("无法找到配置文件!");
        }
    }
    public static Object getBean(String keyName){
        Object o = null;
        try{
            //根据属性文件中定义的关键字创建实例
            o = Class.forName(p.get(keyName).toString()).newInstance();
        }catch (Exception e){
            System.out.println("无法实例化对象!");
        }
        return o;
    }
}

7、打印机接口

package com.example.demo.printer;
public interface Printer {
    void init();

    void print(String txt);
}

8、测试类

package com.example.demo.printer;

public class TestComputer {
    public static void main(String[] args) {
        Computer pcl = new Computer();
        //实现不用new关键字
        Printer p = (Printer) GetBeans.getBean("printer");
        pcl.setP(p);
        pcl.getP().print("打印测试页...");
    }
}

9、效果



当电脑要安装黑白打印机的时候只需要将配置文件中的printer变量的值设置为

printer = com.example.demo.printer.GrayPrinter

这样做的好处就是实现,既不需要改变Computer类也不需要改变测试类中的代码,通过配置的方式就可以选择不同的打印机进行安装

原文地址:https://www.cnblogs.com/zn615/p/9006833.html

时间: 2024-12-09 04:15:37

依赖注入之setter注入---只需修改配置,电脑就可以安装不同的打印机;读取properties配置文件并创建实例;实现不采用new的方式直接实例化对象的相关文章

考题一:研究对全排列着色的性质 问题 A: 首先需要生成 n 的全排列然后对 n 的全排列进行着色, 使得相邻的两个数只需用最少颜色就可以把相邻的两个数用那区分开. (这里相邻包含两层含义:同时在自然

问题: (用C++实现)     **研究对全排列着色的性质. 首先需要生成n的全排列 然后对n的全排列进行着色, 使得相邻的两个数只需用最少颜色就可以把相邻的两个数用那区分开.  (这里相邻包含两层含义:同时在自然顺序和在当前排列的顺序中) 最后, 对着色的结果进行统计 结果需要 给定n,找出所有需要2种颜色的排列. 需要3种颜色的排列 需要4种颜色的排列 (已经证明最多只需要4色) (在第一问基础上)第二问: 需要找出需要4色的规律. 发现需要 4色的排列里面 有一些可以用以下个模型来表示(

只需一台电脑,人人都可用 Python 实现新冠病毒分布实时追踪

目前,随着新型冠状病毒(COVID-19)的全球范围内蔓延,海外地区现有确诊已经上升至 293683 (数据更新至 2020.03.25 16:54) .为了更好了保证自身健康,我们必须了解正在影响?活所在地区的实际统计数据. 如何利用现有工具来事实追踪病情分布呢?近日,一个有趣的开源项目正好解决了这一问题.只需一台电脑,谁都可按照步骤利用 Python 获得专属个人的疫情信息.作者发布了文章介绍该操作过程,雷锋网 AI 源创评论将其编译如下. 图片来源:Sebastian Herrmann o

Spring依赖注入的Setter注入(通过get和set方法注入)

导入必要的jar包(Spring.jar和commonslogging.jar) 在src目录下建立applicationContext.xml   (Spring 管理 bean的配置文件) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPEING//DTD BEAN//EN" "http://www.springframewor

【Spring】Construcotrer注入和setter注入不同的XML写法方式

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文主要讲解了Spring中constructor注入的4种不同写法和sette的3种不同写法 一.constructor注入4种不同写法 通过构造方法注入,就相当于给构造方法的参数传值set注入的缺点是无法清晰表达哪些属性是必须的,哪些是可选的,构造注入的优势是通过构造强制依赖关系,不可能实例化不完全的或无法使用的bean. 第1种方法:直接传值 <!-- constructor方式注入写

Bean的构造器注入和setter注入

链接:https://pan.baidu.com/s/1vixLrr8harzZMwLsIB1Mwg 提取码:ou1n 首先要明白,为什么要注入? IOC容器会在初始化时,创建好所有的bean对象的实例(懒汉模式除外:https://www.cnblogs.com/ABKing/p/12044025.html) 这就带来一个问题,当bean中只有方法的时候还不会出问题. 但是如果bean中还有属性呢? 这就是属性注入的出现原因了.为了对bean的属性进行赋值,我们引入了注入的概念 0x00 构造

使用构造方法注入和setter注入的配置文件

<?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/sch

微信图文消息添加音乐一招搞定 只需修改背景音乐地址

最近经常听网友问微信图文消息加音乐怎么弄,其实微信公众号添加音乐很简单,复制几行代码到公众平台图文素材中就能实现,只需修改一下背景音乐地址就可以了. 首先打开W3School在线测试工具www.w3school.com.cn/tiy/t.asp,在左侧框内添加代码, 代码如下,修改“mp3地址”,两个地方都要改,在网上找你所喜欢的音乐地址 <p>--开始复制--</p> <p> <audio src="mp3地址" autoplay="

【只需3步】手动安装Apache以及配置(亲测可行)

redhat6采用centos yum源. 第一步下载apache依赖的软件包并安装 安装 apr下载地址:http://apr.apache.org/download.cgi 解压包:tar -jxvf apr-1.5.0.tar.bz2 注意:这里的包的格式是tar.bz2格式,如果是.tar格式的用 tar -zxvf +包的名字 命令解压. 进入该包的文件夹内,依次执行以下命令: ./configure --prefix=/work/installed/apr (注意:configure

oracle(Xe)数据库远程连接需修改配置参数

1.找到oracle安装后的目录,然后找到tnsnames.ora文件 修改相关文件内容: XE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.107)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE) ) ) EXTPROC_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (A