依赖注入之构造器注入

说明:

  相比于前面的setter注入,构造器注入主要修改了computer类,给computer类中添加了构造器,并且在测试类中,直接将实例传递给了构造器。

1、项目截图

2、打印机接口类

package com.example.demo.printer;

public interface Printer {
    void init();

    void print(String 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;

public class GrayPrinter implements Printer{

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

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

5、读取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;
    }
}

6、电脑类

package com.example.demo.printer;

public class Computer {

    Printer p;
    public Computer(Printer p) {
        this.p = p;
    }

    public Printer getP() {
        return p;
    }

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

7、测试类

package com.example.demo.printer;

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

8、配置文件

printer = com.example.demo.printer.ColorPrinter

9、效果:

猜你喜欢

转载自www.cnblogs.com/zn615/p/9006924.html