精华内容
下载资源
问答
  • 静态工厂和实例工厂的区别
    2019-08-14 22:19:00

    简单概述,后续会详细讲解的

    1. 静态工厂方法:工厂初始化之前,工厂中的类已经被实例化放在工厂容器中
    2. 实例工厂方法:工厂在构造方法初始化时,会将类进行实例化放在工厂中

    转载于:https://www.cnblogs.com/l-x-x-y-d-j/p/11355076.html

    更多相关内容
  • 主要介绍了Spring的实例工厂方法和静态工厂方法实例代码,具有一定借鉴价值,需要的朋友可以参考下
  • 这三种方式分别为:使用静态工厂...静态工厂和实例工厂区别:静态工厂指的是工厂的服务是静态的,也就是工厂提供的方法是static的,那么这些方法仅有工厂提供以及管理更新等,跟客户端或者说调用端是没有关系的;...

    这三种方式分别为:使用静态工厂创建对象,使用实例工厂创建对象,使用无参构造函数创建对象。

    工厂模式:工厂提供服务(方法),客户只需要满足服务的条件即可,解耦很明显,这里自己的责任自己负责,每一环没有必要关心另一环的逻辑实现。

    静态工厂和实例工厂区别:静态工厂指的是工厂的服务是静态的,也就是工厂提供的方法是static的,那么这些方法仅有工厂提供以及管理更新等,跟客户端或者说调用端是没有关系的;实例工厂指的是工厂提供的方法服务室非static的,那么客户端或者调用端是需要自己创建工厂对象然后去调用工厂中的方法或者服务的,那么管理这些方法或者服务相当于是客户端了。所以静态工厂和实例工厂主要是实际参与管理工厂管理者的不同,其次实例工厂设计相对灵活,客户端与工厂都可以参与管理设计,静态工厂相对正式死板

    以下三种创建对象的方法前两种是工厂模式创建,第三种是单例创建,工厂创建只需要注意是静态工厂还是实例工厂,对象都是在工厂中创建出来的,因此,工厂创建模式配置相对比较少。单例创建对象的话需要多少对象就创建多少对象,相对配置较多。比如第一种静态创建对象,

    下面见代码:

    静态工厂创建对象:

    一:通过静态工厂模式创建对象

    package cn.itcast.beans;
     
    public class Bean1 {
        public void add(){
            System.out.println("bean1 ........");
        }
    }

    package cn.itcast.beans;
     
    public class Bean1_factory {
        public static Bean1 getBean(){
            return new Bean1();
        }
    }

    二:通过实例工厂模式创建对象

    package cn.itcast.beans;
     
    public class Bean2 {
        public void add(){
            System.out.println("bean2 ........");
        }
    }

    package cn.itcast.beans;
     
    public class Bean2_factory {
        public Bean2 getBean(){
            return new Bean2();
        }
    }

    三:通过简单构造函数创建单例对象

    package cn.itcast.beans;
     
    public class Bean3 {
        public void add(){
            System.out.println("bean3 ........");
        }
    }

    package cn.itcast.beans;
     
     
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
     
    public class Test {
     
        public static void main(String[] args){
            ApplicationContext context = 
                    new ClassPathXmlApplicationContext("beans01.xml");
            Bean1 b1 = (Bean1)context.getBean("bean1");
            Bean2 b2 = (Bean2)context.getBean("bean2");
            Bean3 b3 = (Bean3)context.getBean("bean3");
            b1.add();
            b2.add();
            b3.add();
            System.out.println(b1);
            System.out.println(b2);
            System.out.println(b3);
        }
        
        
        
    }

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 
        
        <!-- 使用静态工厂创建对象 -->
        <bean id="bean1" class="cn.itcast.beans.Bean1_factory" 
            factory-method="getBean">
        </bean>
        
        <!-- 使用实例工厂创建对象 -->
        <bean id="bean2_fcty" class="cn.itcast.beans.Bean2_factory">
        
        </bean>
        <bean id="bean2" factory-bean="bean2_fcty" factory-method="getBean">
        
        </bean>
        
        <!-- 使用无参构造函数创建对象 -->
        <bean id="bean3" class="cn.itcast.beans.Bean3">
        </bean>
    </beans>   

    展开全文
  • spring静态工厂和实例工厂的区别

    千次阅读 2018-11-06 16:46:15
    --实例工厂方法是先将工厂实例化--> main测试方法(使用单元测试的方法进行测试) package com.tang; import org.junit.Before; import org.junit.Test; import org.springframework....

    新闻实体类NewsBean

    package com.tang;
    
    /**
     * 新闻实体类
     */
    public class News {
        String title;
        String content;
    
        @Override
        public String toString() {
            return "News{" +
                    "title='" + title + '\'' +
                    ", content='" + content + '\'' +
                    '}';
        }
    
        public String getTitle() {
            return title;
        }
    
        public void setTitle(String title) {
            this.title = title;
        }
    
        public String getContent() {
            return content;
        }
    
        public void setContent(String content) {
            this.content = content;
        }
    
        public News(String title, String content) {
    
            this.title = title;
            this.content = content;
        }
    
        public News() {
    
        }
    }
    

    实例工厂方法

    package com.tang;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 实例工厂
     */
    public class InstanceFactory {
        Map<String,News> newsMap = new HashMap<String,News>();
    
        public InstanceFactory(){
            newsMap.put("news1",new News("InstanceFactory标题1","内容1"));
            newsMap.put("news2",new News("InstanceFactory标题2","内容2"));
        }
    
        public News getNews(String name){
            return newsMap.get(name);
        }
    }
    

    静态工厂方法

    package com.tang;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 静态工厂
     */
    public class StaticFactory {
        private static Map<String,News> newsMap = new HashMap<String,News>();
        static {
            newsMap.put("news1",new News("StaticFactory标题1","内容1"));
            newsMap.put("news2",new News("StaticFactory标题2","内容2"));
        }
    
        public static News getNews(String name){
            return newsMap.get(name);
        }
    }
    

    xml配置

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <!--静态工厂方法 工厂不需要实例化-->
        <bean id="news11" class="com.tang.StaticFactory" factory-method="getNews">
            <constructor-arg value="news1"/>
        </bean>
        <bean id="news12" class="com.tang.StaticFactory" factory-method="getNews">
            <constructor-arg value="news2"/>
        </bean>
    
        <!--实例工厂方法是先将工厂实例化-->
        <bean id="instanceFactory" class="com.tang.InstanceFactory"/>
    
        <bean id="news21" factory-bean="instanceFactory" factory-method="getNews">
        <constructor-arg value="news1"/>
        </bean>
        <bean id="news22" factory-bean="instanceFactory" factory-method="getNews">
            <constructor-arg value="news2"/>
        </bean>
    </beans>

    main测试方法(使用单元测试的方法进行测试)

    package com.tang;
    
    import org.junit.Before;
    import org.junit.Test;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class test {
        private ClassPathXmlApplicationContext ctx;
    
        @Before
        public void before() {
            //初始化Spring容器,当Spring容器初始化时,会自动加载配置文件,然后根据配置文件中的内容初始化Bean
            ctx = new ClassPathXmlApplicationContext("application.xml");
        }
    
        @Test
        public void test1() {
            News news11 = (News) ctx.getBean("news11");
            System.out.println(news11);
            News news12 = (News) ctx.getBean("news12");
            System.out.println(news12);
        }
    
        @Test
        public void test2() {
            News news21 = (News) ctx.getBean("news21");
            System.out.println(news21);
            News news22 = (News) ctx.getBean("news22");
            System.out.println(news22);
        }
    }
    

    测试结果

    test1:

    News{title='StaticFactory标题1', content='内容1'}
    News{title='StaticFactory标题2', content='内容2'}
    
    Process finished with exit code 0

    test2:

    News{title='InstanceFactory标题1', content='内容1'}
    News{title='InstanceFactory标题2', content='内容2'}
    
    Process finished with exit code 0

    参考https://blog.csdn.net/woshiwusonghaha/article/details/72801187

    展开全文
  • 什么是静态工厂? 工厂类所有方法都是静态的 /** * 里面一般来说都是静态的方法 * @author memory_coder * @2017年10月2日 上午10:05:31 */ public class StaticBeanFactory { public static User getUser() ...

    什么是静态工厂?

    工厂类所有方法都是静态的

    /**
     * 里面一般来说都是静态的方法
     * @author memory_coder
     * @2017年10月2日 上午10:05:31
     */
    public class StaticBeanFactory {
    	public static User getUser()
    	{
    		return new UserImpl();
    	}
    }
    在Application.xml文件中的配置

    
    <!-- class为静态工厂类的全限定类名 factory-method为使用的静态方法
    <bean id="user" class="com.slxy.factory.StaticFactory" factory-method="getUser" ></bean>

    什么是实例工厂?

    工厂类的方法为静态方法

    /**
     * @author memory_coder
     * @2017年10月3日 下午6:49:44
     */
    public class InstantBeanFactory {
    	public User getUser()
    	{
    		return new UserImpl();
    	}
    }

    在Application.xml文件中的配置为

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans 
           					   http://www.springframework.org/schema/beans/spring-beans.xsd">
           	<!-- 配置实例工厂 -->
    	<bean id="userFactory" class="com.slxy.factory.InstantBeanFactory" ></bean>
    		<!-- 配置工厂实例的对象 factory-bean为使用实例工厂的id属性值   factory-method为调用工厂的方法-->
    	<bean id="userId" factory-bean="userFactory" factory-method="createUserService"></bean>
    </beans>
    使用方法都一样

    /**
     * @author memory_coder
     * @2017年10月3日 下午6:57:28
     */
    public class InstantBeanFactoryText {
    	@Test
    	public void createUserService()
    	{
    		// 加载spring配置文件
    		ApplicationContext context = new ClassPathXmlApplicationContext("InstantApplication.xml");
    		// 获得user实例对象
    		UserS us = context.getBean("userId",User.class);
    		us.addUser();
    	}
    }
    


    展开全文
  • 一、静态工厂方法注入bean   调用静态工厂方法创建 bean 是将对象创建的过程封装到静态方法中 , 当客户端需要对象时 , 只需要简单地调用静态方法 , 而不需要关心创建对象的细节。 在XML文件中配置bean时,要声明...
  • Spring静态工厂与动态工厂的创建与配置 静态工厂创建对象: 一:通过静态工厂模式创建对象 package cn.jz.beans; public class Bean1 { public void add(){ System.out.println("bean1 ........"); } } ...
  • 对于通过类名在配置文件中配置Bean是再普通不过的配置了,Spring的实例工厂方法和静态工厂方法都可以用来实例化bean,接下来我们就来看看相关实例 1. bean的创建模式就是框架利用反射new出来的bean实例 2. 工厂模式...
  • 静态工厂实例工厂 创建AirPlane基础类 package com.atguigu.bean; public class AirPlane { private String fdj; //飞机品牌 private String yc; //飞机翼长 private Integer personNum; //可载人数 ...
  • 静态工厂方法和实例工厂方法区别

    千次阅读 2019-12-26 17:55:13
    在学习Spring bean的实例化方式的时候遇到的一个问题,Spring bean实例化有3种方法 1、构造器生成 2、静态工厂方法 3、实例工厂方法 那么问题来了,什么是静态工厂方法,什么是实例工厂方法? 1、静态工厂方法 就是...
  • 在学习Spring bean的实例化方式的时候遇到的一个问题,Spring bean实例化有3种方法 1、构造器生成 2、静态工厂方法 3、实例工厂方法  那么问题来了,什么是静态工厂方法,什么是实例工厂方法? 静态工厂方法 就是...
  • 静态工厂注入 实例化静态工作注入 我来先来看看spring对工厂注入配置的解析. 在文件BeanDefinitionParserDelegate.java里面parseBeanDefinitionAttributes函数里 有这么两句话来解析xml配置,这个定义如下 ...
  • 2. 使用静态工厂方法实例化 factory‐method属性标签 <bean class="com.tuling.service.impl.UserServiceImpl" id="userService2" factory‐method="createUserServiceInstance" > </bean> public ...
  • spring的静态工厂和实例工厂方法

    千次阅读 2017-05-29 11:10:22
    静态工厂和实例工厂方法配置: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=...
  • 一、静态工厂方法注入bean 利用静态工厂方法可以把bean注入到IOC容器中。在XML文件中配置bean时,要指定class的属性为工厂的类;factory-method属性指定工厂类中工厂方法,用于创建bean;constrctor-arg用于给工厂...
  • 主要介绍了 Java静态工厂方法的实例详解的相关资料,希望通过本文大家能掌握java今天工厂方法,需要的朋友可以参考下
  • Bean的实例化1.spring的三种实例化方式2....3.实例工厂方法实例化 构造器实例化是指spring容器通过Bean对应类中默认的无参构造方法来实例化。 静态工厂要求开发者创建一个静态工厂的方法来创建Bean的实...
  • 一、静态工厂方法注入bean利用静态工厂方法可以把bean注入到IOC容器中。在XML文件中配置bean时,要指定class的属性为工厂的类;factory-method属性指定工厂类中工厂方法,用于创建bean;constrctor-arg用于给工厂...
  • 静态工厂方法则是另外一种不通过new来获取一个实例的方法,我们可以通过一个类中公有的静态方法,来返回一个实例。 比如有这样一个People类: class People{ String name; int age; int weight; } 我们传统的...
  • 就Spring IoC容器而言,bean定义基本上描述了创建一个或多个实际bean对象的内容。当需要的时候,容器会从bean定义列表中取得一个指定的bean定义,并根据bean定义里面的配置元数据,使用...使用 静态工厂方法实例化 ...
  • 静态工厂方法和实例工厂方法

    千次阅读 2017-02-05 11:56:26
    在学习Spring bean的实例化方式的时候遇到的一个问题,Spring bean实例化有3种方法 1、构造器生成 2、静态工厂方法 3、实例工厂方法 那么问题来了,什么是静态工厂方法,什么是实例工厂方法? 静态工厂方法: ...
  • JavaEE spring静态工厂创建实例
  • spring bean 静态工厂实例

    千次阅读 2018-10-14 14:00:14
    spring bean 静态工厂实例化 在工厂类中创建一个静态方法来实例化对象。在配置bean时,class指定静态工厂类,同时还需要使用factory-method属性指定工厂类中的静态方法。 1.创建工厂类BeanStaticFactory ...
  • 本文实例讲述了PHP设计模式之简单工厂和工厂模式。分享给大家供大家参考,具体如下: 工厂模式是创建型模式的一种,分为简单工厂模式,工厂模式,抽象工厂模式,简单工厂可以称之为工厂模式的一个特例 先用一段简单...
  • 主要介绍了Spring实战之使用静态工厂方法创建Bean操作,结合实例形式分析了静态工厂方法创建Bean的相关实现步骤与操作注意事项,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 132,966
精华内容 53,186
关键字:

静态工厂和实例工厂

友情链接: boost buck.rar