zoukankan      html  css  js  c++  java
  • 依赖注入之构造器注入

    说明:

      相比于前面的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、效果:

    如果您发现博客内容有什么错误,请您下方留言
  • 相关阅读:
    使用 @Autowired 的时候,到底是写接口还是实现类?
    socket的简单例子
    java 将文件夹所有的文件合并到指定的文件夹下
    java 复制某一文件夹下的所有文件到另一个文件夹下
    java Date日期总结的一些转换的方法
    java 可排序的数值得字符串,转化成list集合后进行的排序的几种方法
    java 查看文件的大小的方法
    java 从一个总的list集合中,去掉指定的集合元素,得到新的集合
    java 可拆成数组的字符串,去掉重复元素的一种方法
    将博客搬至CSDN
  • 原文地址:https://www.cnblogs.com/zn615/p/9006924.html
Copyright © 2011-2022 走看看