-
IOC 控制反转——>程序不依赖具体实现,而是依赖于抽象接口–林信良
例子
实现文件读取,现在读取XML,以后不一定
传统的实现
-public class OldXmlReader { public void reader(){ System.out.println("读取XML");}}
- 执行
OldXmlReader oxr = new OldXmlReader(); oxr.reader();
- 执行
通过set注入实现
- 定义读取器规范
public interface Reader {public void Read();}
- 其中一种实现
public class XmlReader implements Reader{@Override public void Read() {System.out.println("XML");}}
- 另外一种实现
public class TxtReader implements Reader{@Override public void Read() {System.out.println("读取TXT");}}
- service类
public class ReaderService {private Reader reader;public void setReader(Reader reader) {this.reader = reader;}public void read(){reader.Read();}}
- 执行
ReaderService rs = new ReaderService();rs.setReader(new XmlReader());rs.read();
- 通过配置文件来实现注入
public class ReaderFactory {private Properties prop;private static ReaderFactory readerFactory;private ReaderService rs;private Reader read;ReaderFactory() throws Exception{InputStream in = ReaderFactory.class.getClassLoader().getResourceAsStream("properties/read.properties");prop = new Properties();//加载配置文件 prop.load(in);String readerService = prop.getProperty("ReaderService.java");String reader = prop.getProperty("Reader.java");//根据反射获取类的实例rs = (ReaderService) Class.forName(readerService).newInstance();read = (Reader) Class.forName(reader).newInstance();rs.setReader(read);}public static ReaderFactory getNewInstance() throws Exception{if(null == readerFactory ){readerFactory = new ReaderFactory();}return readerFactory;}public ReaderService getRs() {return rs;}public Reader getRead() {return read;}}
- 具体的配置文件
ReaderService.java=com.want.spring.one.partOne.ReaderService Reader.java=com.want.spring.one.partOne.TxtReader
- 执行
ReaderFactory.getNewInstance().getRs().read();
- 定义读取器规范
Spring学习
最新推荐文章于 2022-05-26 09:17:15 发布