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

Posted 猫头鹰的眼睛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了依赖注入之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类也不需要改变测试类中的代码,通过配置的方式就可以选择不同的打印机进行安装 

 

以上是关于依赖注入之setter注入---只需修改配置,电脑就可以安装不同的打印机;读取properties配置文件并创建实例;实现不采用new的方式直接实例化对象的主要内容,如果未能解决你的问题,请参考以下文章

p命名空间简化属性依赖注入之setter方法

框架学习 Spring之依赖注入DI

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

Spring 依赖注入(DI)详解 [Spring][依赖注入的 6 种实现方式][setter注入][构造器注入][注解注入][自动装配注入][静态工厂注入][实例工厂注入]

spring4之依赖注入的三种方式

[Spring实战系列]Spring注入方式之setter注入