首页 > 其他分享 >通过FactoryMethod创建对象示例

通过FactoryMethod创建对象示例

时间:2024-03-18 22:37:45浏览次数:17  
标签:name 示例 FactoryMethod 创建对象 id Person person public String

factory-bean: 指定使用哪个工程实例,实例工厂,非静态方法创建bean
factory-method:指定使用哪个工厂实例的方法。静态工厂,静态方法创建bean
判断的依据是 创建bean的方法是否存在 static 修饰符。
具体code 如下:

package com.gientech.factoryMethod;

public class Person {

    private int id;
    private String name;
    private int age;
    private String gender;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }
}

创建静态方法

package com.gientech.factoryMethod;

public class PersonStaticFactory {

    public static Person getPerson(String name){
        Person person = new Person();
        person.setId(1);
        person.setName(name);
        return person;
    }
}
package com.gientech.factoryMethod;

public class PersonInstanceFactory {

    public Person getPerson(String name){
        Person person = new Person();
        person.setId(2);
        person.setName(name);
        return person;

    }
}

创建配置文件

<?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-method : 静态工厂, 指定使用哪个工厂实例的方法 -->
    <bean id="person" class="com.gientech.factoryMethod.PersonStaticFactory" factory-method="getPerson">
        <constructor-arg value="zhangsan"></constructor-arg>
    </bean>

    <!-- factory-bean : 实例工厂,指定使用哪个工程实例, -->
    <bean id="personInstanceFactory" class="com.gientech.factoryMethod.PersonInstanceFactory"></bean>
    <bean id="person2" class="com.gientech.factoryMethod.Person" factory-bean="personInstanceFactory" factory-method="getPerson">
        <constructor-arg value="lisi"></constructor-arg>
    </bean>
</beans>

创建测试类

package com.gientech.factoryMethod;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class FactoryMethodTest {
    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("factoryMethod.xml");
        Person person = ac.getBean("person", Person.class);
        System.out.println(person);
        Person person2 = ac.getBean("person2", Person.class);
        System.out.println(person2);
    }
}

运行结果如下:
factory-method示例

factoryMethod 执行流程
factoryMethod执行流程

nstantiateUsingFactoryMethod方法执行流程图如下:
instantiateUsingFactoryMethod方法

标签:name,示例,FactoryMethod,创建对象,id,Person,person,public,String
From: https://www.cnblogs.com/zgcy123456/p/18079072

相关文章

  • 一个用于强化学习的卷积神经网络基础结构示例
    classGomokuNet(nn.Module):def__init__(self,input_dim,action_space):super(GomokuNet,self).__init__()#定义网络层self.conv1=nn.Conv2d(1,32,kernel_size=3,padding=1)self.conv2=nn.Conv2d(32,64,kerne......
  • python @pytest.fixture示例及用法
    [email protected]示例及用法@pytest.fixture是pytest测试框架中的一个非常有用的功能,它允许你定义可以在多个测试用例之间共享的设置和清理代码。通过使用fixture,你可以减少重复的代码,并使得测试用例更加清晰和模块化。下面是一个简单的示例,展示了如何使用@pytest.fi......
  • go语言请求http接口示例 并解析json
    本例请求了天气api接口对接流程注册一个账号,对接免费实况天气接口阅读接口文档http://tianqiapi.com/index/doc?version=day请求接口解析json开发流程创建一个json.go文件需要引入的包import( "encoding/json" "fmt" "io/ioutil" "net/http")定义Wea......
  • 递归示例-展开编号(Excel函数集团)
    展开编号=DROP(fx(COUNTA(B:B)-1),1)fx=LAMBDA(x,IF(x>0,VSTACK(fx(x-1),SEQUENCE(INDEX(Sheet4!$B:$B,x+1),,INDEX(Sheet4!$C:$C,x+1)))))使用Lambda定义x当x小于等0时,返回False,以此作为开关;当x为1时,返回False连接SEQUENCE(INDEX(Sheet4!$B:$B,2),,INDEX(Sheet4!$C:......
  • 【Qt】使用Qt实现Web服务器(二):QtWebApp示例源码
    1、最简使用介绍Demo2演示了最简单的用法,输入url后返回“HelloWorld!”;下面详解示例代码,先看主函数1.1主函数#a)QtWebApp库中定义的名字空间stefanfringsusingnamespacestefanfrings;intmain(intargc,char*argv[]){......
  • Java常用修饰符及示例
    Java修饰符是用来改变类、方法、变量、接口等元素的行为和可见性的关键字。Java修饰符主要分为两大类:访问修饰符和非访问修饰符。访问修饰符(AccessModifiers):public:提供最大的访问权限,任何类(无论是同一包内的还是不同包的)都可以访问到public修饰的类、方法和变量。示例......
  • C++示例:学习C++标准库,std::unordered_map无序关联容器的使用
    01std::unordered_map介绍std::unordered_map是C++标准库中的一种无序关联容器模板类,它提供了一种将键映射到值的方法。它的底层基于哈希表实现,内容是无序的,可以在平均情况下在O(1)的时间复杂度内完成插入、查找和删除操作。值得注意的是,哈希表可能存在冲突,即不同的键值......
  • MongoTemplate的CRUD的操作示例:
    importorg.springframework.data.mongodb.core.MongoTemplate;importorg.springframework.data.mongodb.core.query.Criteria;importorg.springframework.data.mongodb.core.query.Query;importorg.springframework.data.mongodb.core.query.Update;importorg.spring......
  • C# 通信断线重连问题说明与示例
    引言:在开发网络应用程序时,通信断线是一个常见的问题。特别是在客户端与服务器或者两个客户端之间的通信,由于网络问题、服务器故障或者其他原因,通信可能会意外中断。作为C#开发者,我们需要确保应用程序能够优雅地处理这些情况,并且能够自动重连以恢复通信。本文将详细介绍在C#......
  • c++高精度减法的方法和示例代码
    C++中的高精度减法指的是在处理大数时,执行减法操作的方法。通常情况下,C++内置的数据类型(如int、long、double等)可能无法满足大数运算的需求,因为它们的范围有限。在这种情况下,需要使用自定义的数据结构或者字符串来表示大数,并实现相应的算术操作。以下是执行高精度减法的基本思......