符合工厂方法模式
使用:配置相应的xml文件后在service类中可以直接调用BeanFactory.getBean(“id”)方法,获得对象实例。
逻辑:
1.通过加载本地文件的方式,得到Document对象
2.使用xpath表达式(//bean[@id=’"+id+"’])
3.获得在配置文件中id的值和传入的id的值相同的节点元素
4.通过节点元素,获取它的class属性中的值
5.通过得到的class值(实体类路径),使用java反射.c;lass.forName(“” )获得对象的Class
6.用反射的newInstance方法,获得对象实例
7.返回到的到的对象实例
具体代码:
public class BeanFactory {
public static Object getBean(String id){
try {
//1.获取document对象
Document doc=new SAXReader().read(BeanFactory.class.getClassLoader().getResourceAsStream("beans.xml"));
//2.调用api selectSingleNode(表达式)
Element beanEle=(Element) doc.selectSingleNode("//bean[@id='"+id+"']");//xpath表达式
//3.获取元素的class属性
String classValue = beanEle.attributeValue("class");
//4.通过反射返回实现类的对象
final Object newInstance = Class.forName(classValue).newInstance();
return newInstance;
} catch (Exception e) {
e.printStackTrace();
System.out.println("获取bean失败");
}
return null;
}
}
配置文件beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="ProductDao" class="home.sise.cn.impl.ProductDaoImpl"/>
</beans>