zoukankan      html  css  js  c++  java
  • [转]Spring中工厂模式简介

    工厂模式作用:
    核心思想:实例化对象
    需求:
    1.多例对象的创建
    2.有些对象 例如接口/抽象类不能直接实例化 接口–代理 抽象类–创建子类
    3.需要对对象进行二次封装
    静态工厂:
    说明: 静态工厂必须有静态方法。
    调用方式:类名.静态方法
    例:
    (1)建立工厂类

    package com.jt.manage.factory;
    
    import java.util.Calendar;
    
    public class StaticFactory {
        public static Calendar getInstance(){
            return Calendar.getInstance();
        }
    }

    (2)交给Spring管理
    配置xml文件

    <!--配置静态工厂  -->
    <bean id="calendarA" class="com.jt.manage.factory.StaticFactory" factory-method="getInstance" />
     

    静态工厂可以通过类名.静态方法的形式获取对象,因此只需要将静态工厂对象交给Spring管理,并提供静态工厂方法即可。
    实例工厂:
    说明:实例化工厂要求必须先创建工厂对象,之后通过工厂方法调用获取对象
    (1)建立工厂类

    package com.jt.manage.factory;
    
    import java.util.Calendar;
    
    public class InstanceFactory {
        public  Calendar getInstance(){
            return Calendar.getInstance();
        }
    }

    (2)交给Spring管理
    配置xml文件

    <!--配置实例化工厂  -->
        <bean id="instanceFactory" class="com.jt.manage.factory.InstanceFactory"></bean>
        <bean id="calendarB" class="com.jt.manage.factory.InstanceFactory" factory-bean="instanceFactory" factory-method="getInstance"></bean>

    实例工厂需要将工厂对象交给Spring管理,然后建立bean对象,将工厂对象和工厂对象的获取对象方法交给其即可。
    Spring工厂:
    说明:该模式有spring内部调用,不需要做多余的配置但是需要实现特定的接口FactoryBean。
    (1)建立工厂类

    public class CalendarFactory implements FactoryBean<Calendar> {
    
        @Override
        public Calendar getObject() throws Exception {
            // TODO Auto-generated method stub
            return Calendar.getInstance();
        }
    
        @Override
        public Class<?> getObjectType() {
            // TODO Auto-generated method stub
            return Calendar.class;
        }
    
        @Override
        public boolean isSingleton() {
            // TODO Auto-generated method stub
            return false;
        }

    (2)交给Spring管理

    <!--配置spring工厂  -->
    <bean id="calendarC" class="com.jt.manage.factory.CalendarFactory"></bean>

    FactoryBean接口需要实现三个方法并制定工厂管理的对象泛型。
    isSingleton()方法:用于指定对象是否为单例,单例对象由Spring创建、存储并管理;多例对象Spring只负责创建,不负责销毁。
    getObjectType() 方法:若对象为单例,则在Spring容器关闭时调用此方法,获得该对象的class对象并通过class对象寻找所有该类对象进行删除。
    getObject()方法:获取对象。
    工具类测试:

      @Test
        public void testFactory(){
            //1.实例化Spring容器
            ApplicationContext context = 
                    new ClassPathXmlApplicationContext("spring/factory.xml");
            Calendar calendarA = (Calendar) context.getBean("calendarA");
            System.out.println(calendarA.getTime());
            
            Calendar calendarB = (Calendar) context.getBean("calendarB");
            System.out.println(calendarB.getTime());
            
            Calendar calendarC = (Calendar) context.getBean("calendarB");
            System.out.println(calendarC.getTime());
        }
  • 相关阅读:
    AutoFac
    MEF 基础简介 四
    MEF 基础简介 三
    MEF 基础简介 二
    MEF 基础简介 一
    Ioc原理理解
    .NET里面 abstract class和Interface有什么区别以及用法的展现?
    .NET-ORM框架EF-Code First代码优先
    SQL SERVER PIVOT与用法解释
    SQL Server 中的 NOLOCK 到底是什么意思?
  • 原文地址:https://www.cnblogs.com/binghuaZhang/p/14068834.html
Copyright © 2011-2022 走看看