工厂模式
工厂模式很常用,降低程序耦合度提高开发效率,把更多的事交给程序去做。
spring的ioc就是其中之一。
导入依赖坐标:dom4j+xpath
<!--dom4j-->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.6</version>
</dependency>
编写beans.xml
<?xml version="1.0" encoding="UTF-8" ?>
<beans>
<!--生成service对象配置-->
<bean id="userService" class="com.travel.service.impl.UserServiceImpl"></bean>
</beans>
编写工厂类
/**
* 工厂类
*/
public class BeanFactory {
//基于工厂创建对象方法
public static Object getBean(String id){
Object result = null;
try {
//1、加载配置文件
InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("beans.xml");
//2、创建dom4j核心解析器
SAXReader saxReader = new SAXReader();
//3、读取io,解析xml文件
Document document = saxReader.read(in);
//4、编写xpath语法获取bean标签
String xpath="//bean[@id='"+id+"']";
//5、获取bean标签对象
Element element = (Element) document.selectSingleNode(xpath);
//6、获取bean标签的class属性值 类全限定名
String className = element.attributeValue("class");
//7、通过反射,获取类字节码文件
Class<?> clazz = Class.forName(className);
//8、通过反射创建对象
result = clazz.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
使用
private UserService userService = (UserService) FactoryBeanUtil.getBean("UserService");