说明:java
相比于前面的setter注入,构造器注入主要修改了computer类,给computer类中添加了构造器,而且在测试类中,直接将实例传递给了构造器。ide
一、项目截图测试
二、打印机接口类this
package com.example.demo.printer; public interface Printer { void init(); void print(String txt); }
三、彩色打印机类spa
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)); } }
四、黑白打印机code
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)); } }
五、读取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; } }
六、电脑类blog
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; } }
七、测试类接口
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("打印测试页..."); } }
八、配置文件get
printer = com.example.demo.printer.ColorPrinter
九、效果: