精华内容
下载资源
问答
  • 静态工厂与实例工厂 创建AirPlane基础类 package com.atguigu.bean; public class AirPlane { private String fdj; //飞机品牌 private String yc; //飞机翼长 private Integer personNum; //可载人数 ...

    静态工厂与实例工厂

    1. 创建AirPlane基础类

      package com.atguigu.bean;
      
      public class AirPlane {
      
      	private String fdj;	//飞机品牌
      	private String yc;	//飞机翼长
      	private Integer personNum;	//可载人数
      	private String jzName;	//机长名字
      	private String fjsName;	//副机长名字
      
      	@Override
      	public String toString() {
      		return "AirPlane [fdj=" + fdj + ", yc=" + yc + ", personNum=" + personNum + ", jzName=" + jzName + ", fjsName="
      				+ fjsName + "]";
      	}
      
      	public String getFdj() {
      		return fdj;
      	}
      
      	public void setFdj(String fdj) {
      		this.fdj = fdj;
      	}
      
      	public String getYc() {
      		return yc;
      	}
      
      	public void setYc(String yc) {
      		this.yc = yc;
      	}
      
      	public Integer getPersonNum() {
      		return personNum;
      	}
      
      	public void setPersonNum(Integer personNum) {
      		this.personNum = personNum;
      	}
      
      	public String getJzName() {
      		return jzName;
      	}
      
      	public void setJzName(String jzName) {
      		this.jzName = jzName;
      	}
      
      	public String getFjsName() {
      		return fjsName;
      	}
      
      	public void setFjsName(String fjsName) {
      		this.fjsName = fjsName;
      	}
      
      }
      
      
    2. 创建静态工厂类

      package com.atguigu.factory;
      
      import com.atguigu.bean.AirPlane;
      
      /**
       * 静态工厂
       * @author Keeper
       *
       */
      public class AirPlaneStaticFactory {
      	
      	public static AirPlane getAirPlane(String jzName){
      		System.out.println("AirPlaneStaticFactory正在造飞机!");
      		AirPlane airPlane = new AirPlane();
      		airPlane.setFdj("蓝天");
      		airPlane.setFjsName("lfy");
      		airPlane.setJzName(jzName);
      		airPlane.setPersonNum(30);
      		airPlane.setYc("198.8cm");
      		return airPlane;
      	}
      	
      }
      
      
    3. 创建实例工厂类

      package com.atguigu.factory;
      
      import com.atguigu.bean.AirPlane;
      
      /**
       * 实例工厂
       * @author Keeper
       *
       */
      public class AirPlaneInstanceFactory {
      
      	public AirPlane getAirPlane(String jzName){
      		System.out.println("AirPlaneInstanceFactory正在造飞机!");
      		AirPlane airPlane = new AirPlane();
      		airPlane.setFdj("蓝天");
      		airPlane.setFjsName("lfy");
      		airPlane.setJzName(jzName);
      		airPlane.setPersonNum(30);
      		airPlane.setYc("198.8cm");
      		return airPlane;
      	}
      	
      }
      
      
    4. 工厂配置文件

    <?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">
    
    	<!-- 
    		工厂模式:工厂帮我们创建对象,有一个专门创建对象的类
    		AirPlane ap = AirPlaneFactory.getAirPlane(String jzName);
    		
    		静态工厂:工厂本身不用创建,通过静态方法调用
    		实例工厂:工厂本身需要创建,需要先new工厂类对象
    	 -->
    	 
    	 <!-- 静态工程(不需要创建工厂本身) -->
    	 <!-- factory-method:指定哪个方法是工厂方法 -->
    	 <bean id="airPlane01" class="com.atguigu.factory.AirPlaneStaticFactory" 
    	 factory-method="getAirPlane">
    	 	<!-- 可以为方法指定参数 -->
    	 	<constructor-arg value="张三"></constructor-arg>
    	 </bean>
    	 
    	 <!--
    	 	实例工厂
    	 		1、配置出实例工厂类对象
    	 		2、配置要创建的airPlane使用哪个工厂创建
    	 			(1)指定工厂实例(factory-bean)
    	 			(2)指定工厂方法(factory-method)
    	 		3、传参数
    	  -->
    	 <bean id="airPlane02" class="com.atguigu.factory.AirPlaneInstanceFactory"></bean>
    	 <!--
    	 	 factory-bean:指定当前对象创建使用哪个工厂 
    	 	 factory-method:指定哪个方法是工厂方法
    	 -->
    	 <bean id="airPlane" class="com.atguigu.bean.AirPlane" 
    	 factory-bean="airPlane02"  factory-method="getAirPlane">
    	 	<constructor-arg value="李四"></constructor-arg>
    	 </bean>
    	 
    </beans>
    
    
    1. 测试

      package com.atguigu.test;
      
      import org.junit.Test;
      import org.springframework.context.ApplicationContext;
      import org.springframework.context.support.ClassPathXmlApplicationContext;
      
      import com.atguigu.factory.AirPlaneStaticFactory;
      
      import sun.awt.AppContext;
      
      public class AirPlaneTest {
      
      	private ApplicationContext context = new ClassPathXmlApplicationContext("bean_air.xml");
      
      	/**
      	 * 测试静态工厂
      	 */
      	@Test
      	public void testAirPlaneStaticFactory() {
      
      		Object airPlane = context.getBean("airPlane01");
      		System.out.println(airPlane);
      		/*
      		 * 	AirPlaneStaticFactory正在造飞机!
      			AirPlane [fdj=蓝天, yc=198.8cm, personNum=30, jzName=张三, fjsName=lfy]
      		 */
      
      	}
      
      	/**
      	 * 测试实例工厂
      	 */
      	@Test
      	public void testAirPlaneInstanceFactory() {
      		Object airPlane = context.getBean("airPlane");
      		System.out.println(airPlane);
      	}
      	/*
      	 *	AirPlaneStaticFactory正在造飞机!
      		AirPlaneInstanceFactory正在造飞机!
      		AirPlane [fdj=蓝天, yc=198.8cm, personNum=30, jzName=李四, fjsName=lfy] 
      	 */
      
      }
      
      
    展开全文
  • 在id为bean3的Bean中,使用factory-bean属性指向配置的实例工厂,该属性值就是工厂Bean的id。使用factory-method属性来确定使用工厂中的createBean()方法。 **4、在在com.itheima.instance.factory包中,创建测试...

    1、在eclipse中创建chapter02项目,在src下创建一个com.itheima.instance.factory包,在 该包中创建一个Bean3类,类中不需要添加任何方法**

    public class Bean3 {
    
    }
    

    2、在com.itheima.instance.factory包中,创建一个MyBean3Factory类,并在类中重写无参构造方法,并使用createBean()方法来创建Bean3对象。**

    public class MyBean3Factory {
    	//重写无参构造方法
    	public MyBean3Factory()
    	{
    		System.out.println("bean3工厂实例化中。。。。。。");
    	}
    	//创建Bean3的实例方法
    	public Bean3 createBean(){
    		return new Bean3();
    	}
    
    }
    

    3、在src目录下创建Spring配置文件beans3.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-4.3.xsd"
    >
    <bean id="My" class="com.itheima.instance.factory.MyBean3Factory"></bean>
    <bean id="bean3" factory-bean="My" factory-method="createBean"></bean>
    </beans>
    

    在上述配置文件中,首先配置了一个工厂Bean,然后配置了需要实例化的Bean。在id为bean3的Bean中,使用factory-bean属性指向配置的实例工厂,该属性值就是工厂Bean的id。使用factory-method属性来确定使用工厂中的createBean()方法。

    **4、在在com.itheima.instance.factory包中,创建测试类InstanceTest3。

    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class InstanceTest3 {
    	public static void main(String[] args) {
    	//加载配置文件
    	ApplicationContext app=new ClassPathXmlApplicationContext ("beans3.xml");
    	//实例化
    	Bean3 b=(Bean3) app.getBean("bean3");
    	System.out.println(b);
    	//也可以这样实例化,
    	System.out.println(app.getBean("bean3"));//注意构造方法只输出一次
    
    }
    }
    

    5、执行程序后,控制台输出结果如下图
    在这里插入图片描述

    展开全文
  • 运用工厂(静态,实例工厂)3.1:编写静态,实例工厂3.2:spring注入工厂3.3:测试输出: 0.项目结构 1.新建spring项目 1.1:选择使用maven,选择quicktart模板,一路next 1.2:导入依赖: 嫌麻烦的可以直接导入...

    0.项目结构

    在这里插入图片描述

    1.新建spring项目

    1.1:选择使用maven,选择quicktart模板,一路next

    在这里插入图片描述

    1.2:导入依赖:

    嫌麻烦的可以直接导入ssm项目的所有依赖哟:
    https://blog.csdn.net/m0_47306534/article/details/115269906

    在这里插入图片描述

    2.拿到容器中的值(单,多实例)

    2.1:编写Book实体类:

    package com.zyq.pojo;
    
    public class Book {
        private String bookName;
        private String bookPrice;
        private String bookDetail;
    
        public Book() {
    
        }
    
        public Book(String bookName, String bookPrice, String bookDetail) {
            this.bookName = bookName;
            this.bookPrice = bookPrice;
            this.bookDetail = bookDetail;
        }
    
        public String getBookName() {
            return bookName;
        }
    
        public void setBookName(String bookName) {
            this.bookName = bookName;
        }
    
        public String getBookPrice() {
            return bookPrice;
        }
    
        public void setBookPrice(String bookPrice) {
            this.bookPrice = bookPrice;
        }
    
        public String getBookDetail() {
            return bookDetail;
        }
    
        public void setBookDetail(String bookDetail) {
            this.bookDetail = bookDetail;
        }
    
        @Override
        public String toString() {
            return "Book{" +
                    "bookName='" + bookName + '\'' +
                    ", bookPrice='" + bookPrice + '\'' +
                    ", bookDetail='" + bookDetail + '\'' +
                    '}';
        }
    }
    
    

    2.2:新建spring容器

    右键resources,然后新建xml,选择spring config:
    在这里插入图片描述
    注册Book的单,多实例:

    <?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">
    
        <!--1.spring生成对象默认是单例的。-->
        <bean id="Book1" class="com.zyq.pojo.Book">
            <property name="bookName" value="java"/>
            <property name="bookPrice" value="28.5"/>
            <property name="bookDetail" value="从入门到入坟"/>
        </bean>
        <!--2.通过scope属性可以更改为多例-->
        <bean id="Book2" class="com.zyq.pojo.Book" scope="prototype">
            <!--为属性赋值:-->
            <property name="bookName" value="java-web"/>
            <property name="bookPrice" value="9999.99"/>
            <property name="bookDetail" value="从入门到放弃"/>
        </bean>
    
    </beans>
    

    2.3:输出bean:

    (测试能否从此ioc容器中拿出注册的Book)

    package com.zyq;
    
    import com.zyq.pojo.Book;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class MyTest {
        //1.拿出ioc容器中的单实例对象
        @Test
        public void TestOne() {
            ApplicationContext ioc = new ClassPathXmlApplicationContext("ioc.xml");
            //拿出book对象数据
            System.out.println("Book1单实例。。。");
            Book book1 = (Book) ioc.getBean("Book1");
            System.out.println("书名:" + book1.getBookName());
            System.out.println("价格:" + book1.getBookPrice());
            System.out.println("介绍:" + book1.getBookDetail());
        }
    
        //1.拿出ioc容器中的多实例对象
        @Test
        public void TestTwo() {
            ApplicationContext ioc = new ClassPathXmlApplicationContext("ioc.xml");
            //拿出book对象数据
            System.out.println("Book2多实例。。。");
            Book book2 = (Book) ioc.getBean("Book2");
            System.out.println("书名:" + book2.getBookName());
            System.out.println("价格:" + book2.getBookPrice());
            System.out.println("介绍:" + book2.getBookDetail());
        }
    }
    
    
    

    输出结果:
    在这里插入图片描述

    3.运用工厂(静态,实例工厂)

    3.1:编写静态,实例工厂

    静态:

    package com.zyq.factory;
    
    import com.zyq.pojo.Book;
    
    //静态工厂
    public class staticFactory {
        public static Book getBook(String bookName) {
            System.out.println("static静态工厂。。。。");
            Book book = new Book();
            book.setBookName("c++");
            book.setBookPrice("30.5");
            book.setBookDetail("从入门到秃头");
            return book;
        }
    }
    
    

    实例:

    package com.zyq.factory;
    
    import com.zyq.pojo.Book;
    
    //实例工厂
    public class shiliFactory {
        public Book getBook(String bookName) {
            System.out.println("实例工厂。。。。");
            Book book = new Book();
            book.setBookName("java-ee");
            book.setBookPrice("36.5");
            book.setBookDetail("同学你学废了吗");
            return book;
        }
    }
    
    

    3.2:spring注入工厂

    与spring的ioc容器创建一致:
    在这里插入图片描述
    代码:

    <?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">
        <!--
        知识点:
        factory-bean指定使用那个工厂实例;
        factory-method指定使用那个工厂方法
        -->
        <!--1.static静态工厂-->
    
        <bean id="Book1" class="com.zyq.factory.staticFactory" factory-method="getBook">
            <!--可以为方法指定参数-->
            <constructor-arg value="c++"/>
        </bean>
        <!--2.实例工厂-->
        <bean id="BookShiliFactory" class="com.zyq.factory.shiliFactory"></bean>
        <bean id="Book2" class="com.zyq.pojo.Book" factory-bean="BookShiliFactory" factory-method="getBook">
            <constructor-arg value="java-ee"/>
        </bean>
    
    </beans>
    

    3.3:测试输出:

    package com.zyq;
    
    import com.zyq.pojo.Book;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class FactoryTest {
        @Test
        public void staticFactory() {
            ApplicationContext ioc = new ClassPathXmlApplicationContext("factory.xml");
            Book book1 = (Book) ioc.getBean("Book1");
            System.out.println("书名:" + book1.getBookName());
            System.out.println("价格:" + book1.getBookPrice());
            System.out.println("介绍:" + book1.getBookDetail());
        }
    
        @Test
        public void shiliFactory() {
            ApplicationContext ioc = new ClassPathXmlApplicationContext("factory.xml");
            Book book2 = (Book) ioc.getBean("Book2");
            System.out.println("书名:" + book2.getBookName());
            System.out.println("价格:" + book2.getBookPrice());
            System.out.println("介绍:" + book2.getBookDetail());
    
        }
    }
    
    

    在这里插入图片描述

    到此结束
    GJS纯洁

    展开全文
  • 实例工厂方法: 将对象的创建 过程封装到另外一个对象实例的方法里. (当客户端需要请求对象时,只需要简单的调用该实例方法而不需要关心对象的创建细节.) 声明通过实例工厂方法创建的Bean 在bean的factory-bean属性...

    静态工厂方法:

    • 静态工厂方法: 将对象的创建 过程封装到另外一个对象实例的方法里.

    • (当客户端需要请求对象时,只需要简单的调用该实例方法而不需要关心对象的创建细节.)
    • 声明通过静态工厂方法创建的Bean

      • 在bean的factory-bean属性里指定拥有的该工厂方法的Bean
      • 在factory-method属性里指定该工厂方法的名称
      • 使用construtor-arg元素为工厂方法传递方法参数

    创建如下所示:
    1.先创建car类(并添加get and set 方法 和有参构造器)如下:
    在这里插入图片描述

    在这里插入图片描述
    2.创建静态工厂方法:并在其中将实例对象
    在这里插入图片描述
    3.配置静态工厂实例文件
    在这里插入图片描述在这里插入图片描述

    实列工厂方法配置bean:

    如下为实例工厂:

    在这里插入图片描述
    如下为实例工厂配置bean 的过程和说明:
    在这里插入图片描述

    展开全文
  • } } 结果 使用实例工厂的形式创建bean 格式 将dog的工厂类的createDog()方法,变为非静态方法,即方法前的修饰符static去掉,否则该bean创建成功 package com.factory; import java.lang.reflect.Constructor; ...
  • Spring的实例工厂方法和静态工厂方法都可以用来实例化bean,本文我们就来看看相关实例。静态工厂方法:直接调用静态方法可以返回Bean的实例package com.zhu.string.factory;import java.util.HashMap;import java....
  • 实例工厂方法实例化Bean 类似于通过静态工厂方法进行实例化,使用实例工厂方法进行实例化会从容器中调用现有bean的非静态方法来创建新bean。 要使用此机制,请将class属性保留为空,并在factory-bean属性中,在当前...
  • 思路清晰创建Bean实例的方式:1) 通过构造器(有参或无参)方式: 2) 通过静态工厂方法方式: 注: 工厂类实例没有创建3) 通过实例工厂方法(非静态方法)方式:注: 工厂类实例被创建方法实用示例1:需求:1 不想再bean.xml...
  • 我有一种情况,我想通过工厂对象动态创建一个对象,但需要通过spring上下文创建对象,以允许自动装配依赖项.我知道有很多其他方法可以解决这个问题 – 例如使用服务定位器模式 – 但是如果可能的话我想这样做.想象一下,...
  • (三)、实例工厂方式。 一、Bean的属性。 bean属性 描述 id 是一个Bean的唯一标识,Spring容器通过该属性进行配置管理。 name Spring通过这个属性对Bean进行管理,多个用逗号隔开。 class...
  • 标题静态工厂注入bean、实例工厂注入bean及autowirted自动配置综合练习 一、静态工厂方法注入bean 将对象创建的过程封装到静态方法中 。 在XML文件中配置bean时,要声明通过静态方法创建的 bean , 需要在 bean 的 ...
  • Spring 依赖注入(DI)详解 [Spring][依赖注入的 6 种实现方式][setter注入][构造器注入][注解注入][自动装配注入][静态工厂注入][实例工厂注入],您的“关注”和“点赞”,是信任,是认可,是支持,是动力.........
  • 通过构造器去实例化 静态工厂方法 实例工厂方法 通过构造器进行创建(默认的方法) <bean id="dog" class="bean.Dog"> <property name="name" value="123">property> bean> Dog.java package bean; public class ...
  • Instantiation by Using an Instance Factory Method (使用实例工厂方法进行实例化) Similar to instantiation through astatic factory method, instantiation with an instance factory method invokes a non-...
  • bean的作用域:使用scope标签分别创建单实例和多实例的bean 单实例的bean: (1)在容器启动完成之前就已经创建好了对象,保存在容器中了 (2)任何获取都是获取同一个对象 (3) 没有用scope标签指定,bean时多实例的时候...
  • 三、通过实例工厂方法创建Bean实例 四、通过自定义的factoryBean来创建bean对象 Hello,你好呀,我是灰小猿!一个超会写bug的程序猿! 工厂模式相信很多小伙伴们都有听说过,但是工厂模式在Java中的具体使用你有...
  • Spring 工厂方式实例化Bean 静态工厂方式实例化 UserFactory类 public class UserFactory { public static User newInstance(String name) { return new User(name); } } user类 public class User { private ...
  • php工厂模式的实例

    2021-04-21 09:42:32
    * 单例模式:用于创建单一类型的唯一实例对象* 工厂模式:用于创建多种类型的多个实例对象//声明形状类class Shape{//声明静态方法create,根据容器形状不同,创建不同图形类的实例public static function create($type,...
  • 目录第一种:使用构造器实例化Bean第二种:使用静态工厂方式实例化Bean第三种:使用实例工厂方法实例化Bean第四种:用 setter 方式 Spring IoC容器如何实例化Bean呢?传统应用程序可以通过new和反射方式进行实例化...
  • java工厂模式实例(设计模式)

    千次阅读 2021-01-26 19:20:35
    java工厂模式 开篇声明,此理解为作者自身理解,不一定正确,如有错误请大佬们指正。 工厂模式,在作者看来,从现实生活来说,就是一个工厂,...实现,并且编写一个工厂类,根据传入获取不同的实现类实例返回给调用者
  • 抽象工厂模式:提供一个创建一系列的相关的或者依赖的对象的接口,无需指定它们的具体实现类,具体的时间分别在子类工厂中产生。类似于工厂模式:隔离了具体类的生产实现,使得替换具体的工厂实现类很容易。包含有...
  • 海尔工厂(Haier)生产海尔空调(HaierAirCondition),美的工厂(Midea)生产美的空调(MideaAirCondition) 。使用工厂方法模式描述该场景,绘制类图并编程实现。package AirCondition;public class test {public static ...
  • 使用静态工厂实例化Bean的另外一种方式(还有一种是构造器实例化),该方式要求开发者创建一个静态工厂的方法来创建Bean,其Bean配置中所指的不在是Bean的实体类而是静态工厂类,并且还需要factory-method属性来指定...
  • 模式定义 与简单工厂类似,该模式用于创建一组相关或依赖的对象,不同之处在于静态工厂模式使用一个静态方法来创建所有类型的对象,该静态... //通过传过来的类名,实现实例化 $className = __NAMESPACE__ . '\\' . uc
  • 实现实例工厂生产产品): 1、工厂接口: package design.pattern.factory; /** * 产品工厂接口 */ public interface BaseProductFactory { BaseProduct createProduct(); } 2、产品基类 package design....
  • 通过构造方法实例化通过静态工厂实例化通过实例工厂实例化通过FactoryBean实例化RumenzA实体类package com.rumenz;public class RumenzA {private String id;private String name;public RumenzA() {System.o...
  • php的工厂模式,可以方便的使用一个静态的工厂方法来实例化某一个类。一般实例化一个类,会给它一些参数,以便在其构析时,可以根据不同的参数反馈出需要的结果。来看一个具体的例子吧,一个User类:复制代码 代码...
  • Spring与简单工厂模式的结合 Factory----@Component----create1/2Tool BaseTool----接口或抽象类 ToolOne----继承或实现BaseTool ToolTwo----继承或实现BaseTool ConstUtil----属性注入类–@Component 主要思想:...
  • 一开始了解了"简单工厂模式"之后,在关于为什么不直接实例对象,而是利用工厂类来实例对象产生了疑惑。经过多种渠道的了解,我最后的观点是:这个工厂类不仅仅就只能有实例化对象这一个功能。举例来说,如果我要在...
  • 我试图找到一种易于扩展的方法来在运行时基于静态String类属性(称为NAME)创建对象.如何改进此代码,它使用简单的if构造?public class FlowerFactory {private final Garden g;public FlowerFactory(Garden g) {this....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 316,385
精华内容 126,554
关键字:

实例工厂