Setter Injection 简单实现
实现控制反转有两种方式1.Dependency Injection 2.Service Locator
本实验通过Properties简单实现依赖注入,Setter Injection实现依赖注入
项目工程目录如下:
public class Business {
private IDeviceWriter writer;
public void setIDeviceWriter(IDeviceWriter writer){
this.writer = writer;
}
public void save(){
writer.saveToDevice();
}
}
public interface IDeviceWriter {
public void saveToDevice();
}
public class FloppyWriter implements IDeviceWriter {
@Override
public void saveToDevice() {
// TODO Auto-generated method stub
System.out.println("FloppyWriter Save!");
}
}
public class UsbDiskWriter implements IDeviceWriter {
@Override
public void saveToDevice() {
// TODO Auto-generated method stub
System.out.println("UsbDiskWriter Save!");
}
}
import java.io.FileInputStream;
import java.util.Properties;
public class BusinessFactory {
private static BusinessFactory factory;
private Properties props;
private Business business;
private IDeviceWriter writer;
private BusinessFactory() throws Exception{
props = new Properties();
//获取配置文件值
props.load(new FileInputStream("config.properties"));
String businessClass = props.getProperty("business.class");
String writeClass = props.getProperty("write.class");
business = (Business)Class.forName(businessClass).newInstance();
writer = (IDeviceWriter)Class.forName(writeClass).newInstance();
//设置依赖关系
business.setIDeviceWriter(writer);
}
public static BusinessFactory getInstance() throws Exception{
if(factory == null){
factory = new BusinessFactory();
}
return factory;
}
public Business getBusiness() {
return business;
}
public void setBusiness(Business business) {
this.business = business;
}
public IDeviceWriter getWriter() {
return writer;
}
public void setWriter(IDeviceWriter writer) {
this.writer = writer;
}
}
public class Main {
public static void main(String[] args) throws Exception {
Business b = BusinessFactory.getInstance().getBusiness();
b.save();
}
}
business.class = Business
write.class = FloppyWriter