工厂模式代码实现

工厂模式

工厂模式很常用,降低程序耦合度提高开发效率,把更多的事交给程序去做。

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");

 

posted @ 2020-08-21 16:35  一半人生  阅读(386)  评论(0)    收藏  举报