Spring的实例工厂方法和静态工厂方法实例代码

Spring的实例工厂方法和静态工厂方法都可以用来实例化bean,本文我们就来看看相关实例。

静态工厂方法:直接调用静态方法可以返回Bean的实例

package com.zhu.string.factory; 

import java.util.HashMap;
import java.util.Map; 

public class StaticCarFactory {
  /**
   * 静态工厂方法:直接调用静态方法可以返回Bean的实例
   *
   */
  private static Map<String ,Car > cars=new HashMap<String , Car>();
  static{
    cars.put("audi",  new Car(3000, "aodi"));
    cars.put("fodo",  new Car(3000, "aodi"));
  }
  //静态工厂方法
  public static Car getCar(String name){
    return cars.get(name);
  }
} 

实例工厂方法。即调用工厂本身,再调用工厂的实例方法来返回bean实例

package com.zhu.string.factory; 

import java.util.HashMap;
import java.util.Map; 

public class InstanceCarFactory {
  /**
   * 实例工厂方法。即调用工厂本身,再调用工厂的实例方法来返回bean实例
   */
  private Map<String ,Car> cars=null;
  public InstanceCarFactory() {
    // TODO Auto-generated constructor stub
    cars=new HashMap<String, Car>();
    cars.put("audi", new Car(1000,"audi"));
    cars.put("dffdas", new Car(2000,"audi"));
  }
  public Car getCar(String brand){
    return cars.get(brand);
  }
} 

beans-factory.xml

<span style="font-size:14px;"><?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

xmlns:p="http://www.springframework.org/schema/p"
  xsi:schemaLocation="http://www.springframework.org/schema/beans  

http://www.springframework.org/schema/beans/spring-beans.xsd"> 

  <!-- 通过静态方法来配置bean,注意不是配置静态工厂方法实例,而是配置bean实例 

-->
  <!--
    class属性:指向静态方法的全类名 factory-method:指向静态方法的名字
    constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配 

置参数
  -->
  <bean id="car1" factory-method="getCar"
    class="com.zhu.string.factory.StaticCarFactory">
    <constructor-arg value="audi"></constructor-arg>
  </bean>
  <!-- 配置工厂的实例 -->
  <bean id="carFactory" class="com.zhu.string.factory.InstanceCarFactory">
  </bean>
  <bean id="car2" factory-bean="carFactory" factory-method="getCar">
    <constructor-arg value="audi"></constructor-arg>
  </bean>
</beans></span> 

Car.java实体类

package com.zhu.string.factory;
public class Car {
	private double price;
	private String brand;
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public String getBrand() {
		return brand;
	}
	public void setBrand(String brand) {
		this.brand = brand;
	}
	@Override
	  public String toString() {
		return "Car [brand=" + brand + ", price=" + price + "]";
	}
	public Car(){
		System.out.println("cars....constructor");
	}
	public Car(double price, String brand) {
		super();
		this.price = price;
		this.brand = brand;
	}
}

Main.java

package com.zhu.string.factory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
	/**
   * @param args
   */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ApplicationContext cx=new ClassPathXmlApplicationContext("beans-
factory.xml");
		Car car1=(Car) cx.getBean("car1");
		System.out.println(car1);
		Car car2=(Car) cx.getBean("car2");
		System.out.println(car2);
	}
}

运行结果:

Car [brand=aodi, price=3000.0]
Car [brand=audi, price=1000.0]

总结

以上就是本文关于Spring的实例工厂方法和静态工厂方法实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

(0)

相关推荐

  • 浅谈Spring5 响应式编程

    近年来,响应式编程在开发者社区和客户中很受欢迎,由于其以声明的方式构建应用程序的能力,而不是强制,形成更加敏感和有弹性的应用.Spring 5 将反应系统纳入其核心框架的事实已经显示出向声明式编程的范式转变. 响应式编程管理数据生产者和消费者之间的异步数据流,它们需要以流畅的方式对数据进行响应.所以,响应式编程都是异步和事件驱动的流畅应用程序,需要少量的线程进行缩放. 响应式编程很难构建基于线程的架构,由于在基于共享可变状态.线程和锁的应用程序扩展过程中涉及到高度复杂性. 在响应式编程的上下文中

  • 浅谈SpringBoot之开启数据库迁移的FlyWay使用

    本文介绍了SpringBoot开启数据库迁移的FlyWay使用,分享给大家,具体如下: 一,首先我先了解下FlyWay是如何运转的. 最简单的方案是将Flyway指向一个空数据库. 它将尝试找到其元数据表.当数据库为空时,Flyway将不会找到它, 而是创建它.您现在拥有一个名为SCHEMA_VERSION的单个空表的数据库 : 该表将用于跟踪数据库的状态.之后,Flyway将开始扫描应用程序的文件系统或类路径进行迁移.它们可以用Sql或Java编写. 然后根据其版本号对迁移进行排序,并按顺序应

  • Intellij IDEA 2017新特性之Spring Boot相关特征介绍

    前言 Intellij IDEA 2017.2.2版本针对Springboot设置了一些特性,本篇文章给大家简单介绍一下如何使用这些特性. Run Dashboard 针对Spring boot提供了Run Dashboard方式的来代替传统的run方法.下面看一下官网提供的面板结构图: 是不是很炫,直接可以通过Dashboard看到Springboot的启动项目,并显示相应的端口等信息,同时还能在这里进行相应的操作.下面我们来看看如何调用出Dashboard. 首先,你的项目应该是一个spri

  • jQuery+SpringMVC中的复选框选择与传值实例

    一.checkbox选择 在jQuery中,选中checkbox通用的两种方式: $("#cb1").attr("checked","checked"); $("#cb1").attr("checked",true); 对应的jQuery函数,主要完成三个功能: 1.第一个复选框选中或取消选中,则下面的复选框为全选或取消全选: 2.当下面的复选框全部选中时,则将第一个复选框设置为选中,当下面的复选框中有一个

  • 浅谈SpringMVC中post checkbox 多选框value的值(隐藏域方式)

    我这里往后端传递checkbox 多选框value的值是通过字符串方式传递,先调用js对选定checkbox遍历获取选的的boxvalue,然后写进隐藏域,最后作文对象的属性提交.见代码:` 前端: <form:form commandName="user" method="post"> <c:forEach items="${deploys}" var="deploy" varStatus="de

  • Spring工厂方法创建(实例化)bean实例代码

    目标明确 简单叙述一下本文想要解决的问题:如何在Spring中不再使用Spring创建Bean实例,而是把Bean创建过程转移到开发者手中. 思路清晰 创建Bean实例的方式: 1) 通过构造器(有参或无参) 方式: <bean id="" class=""/> 2) 通过静态工厂方法 方式: <bean id="" class="工厂类" factory-method="静态工厂方法"/

  • 从SpringMVC迁移到Springboot的方法步骤

    在将SpringMVC项目转移到Springboot上的过程中,主要做了以下的事情 Profile配置 全局变量从properties文件读入 数据源与Mybatis配置 日志文件配置 WebConfig配置(包括原有的web.xml和spring-mvc.xml) 去掉多余的bean注入 本篇文章除了介绍做了些什么和怎么做之外,会多很多多余的废话,关于对原理的一些探讨,知其然也要知其所以然. Profile配置 在传统的Spring项目中,多个profile的配置方式首先是在pom.xml文件

  • Spring循环依赖正确性及Bean注入的顺序关系详解

    一.前言 我们知道 Spring 可以是懒加载的,就是当真正使用到 Bean 的时候才实例化 Bean.当然也不全是这样,例如配置 Bean 的 lazy-init 属性,可以控制 Spring 的加载时机.现在机器的性能.内存等都比较高,基本上也不使用懒加载,在容器启动时候来加载bean,启动时间稍微长一点儿,这样在实际获取 bean 供业务使用时,就可以减轻不少负担,这个后面再做分析. 我们使用到 Bean 的时候,最直接的方式就是从 Factroy 中获取,这个就是加载 Bean 实例的源

  • Spring的实例工厂方法和静态工厂方法实例代码

    Spring的实例工厂方法和静态工厂方法都可以用来实例化bean,本文我们就来看看相关实例. 静态工厂方法:直接调用静态方法可以返回Bean的实例 package com.zhu.string.factory; import java.util.HashMap; import java.util.Map; public class StaticCarFactory { /** * 静态工厂方法:直接调用静态方法可以返回Bean的实例 * */ private static Map<String

  • 30分钟入门Java8之默认方法和静态接口方法学习

    前言 上一篇文章30分钟入门Java8之lambda表达式,我们学习了lambda表达式.现在继续Java8新语言特性的学习,今天,我们要学习的是默认方法和静态接口方法. 这一Java8的新语言特性,在Android N中也得到了支持.至于如何在Android开发中配置Java8的开发环境,请查看上一篇文章30分钟入门Java8之lambda表达式. 默认方法 默认方法让我们能给我们的软件库的接口增加新的方法,并且能保证对使用这个接口的老版本代码的兼容性. 下面通过一个简单的例子来深入理解下默认

  • 如何从Java接口的角度切入静态工厂模式

    面向接口编程 接口的定义及功能 这里从java介入吧,在java中,接口是一种特殊的类,接口里面的量都是常量,接口的方法只有定义而没有实现,换句话说,接口就像一个菜单,它只会告知你我有什么菜,而并不会有实际的菜品,所以通常用接口来定义实现类的外观,根据外部应用所需要的功能,约定实现类的能力(类的功能不仅限于接口约束).通过接口,可以实现不相关类的相同功能,而不考虑这些类之间的层次关系,接口就是实现类对外的外观. 上面那样说,可能显得很装13,那千言万语化成一句人话就是:1.定义功能,对外暴露 2

  • C#静态变量与实例变量实例分析

    本文实例讲述了C#静态变量与实例变量的具体用法,分享给大家供大家参考.具体分析如下: 1)在语法定义上的区别: 类变量也叫静态变量,静态变量前要加static关键字,而实例变量前则不加: 实例变量也叫对象变量,即没加static 的变量: 2)在程序运行时的区别: 实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量.静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态

  • Spring实战之使用静态工厂方法创建Bean操作示例

    本文实例讲述了Spring实战之使用静态工厂方法创建Bean操作.分享给大家供大家参考,具体如下: 一 配置 <?xml version="1.0" encoding="GBK"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" x

  • Java静态工厂方法的实例详解

     Java静态工厂方法的实例详解 什么是静态工厂方法 对于类而言,为了让使用者获取它自身的一个实例,最常用的方法就是提供一个公有的构造器. 当然,这里要介绍的是另一种方法--静态工厂方法,一个返回类的实例的静态方法. 举个例子,Boolean的一个将基本类型boolean转为封装类的方法,valueOf: public static Boolean valueOf(boolean b) { return (b ? TRUE : FALSE); } 为什么要使用静态工厂方法 那么,我们为什么要使用

  • Spring框架开发IOC两种创建工厂方法详解

    1.IOC有两种创建工厂的方法 IoC 通过工厂模式创建 bean 的方式有两种: 静态工厂方法 实例工厂方法 2.两种方法的不同 2.1静态方法创建 就是直接可以通过静态方法来实例化一个对象,采用类名.方法名的方式创建 public class HelloFactory { public static HelloWorld getInstance(){ return new Hello(); } } HelloWorldFactory.getInstance(); 2.2实例方法创建 采用ne

  • C#的静态工厂方法与构造函数相比有哪些优缺点

    最近,在与同事进行协同编程时,我们开始讨论在C#中初始化新对象的最佳方法.我一直是使用构造函数实现,尽管他倾向于静态工程方法.这引起了关于每种类型的利弊的大量来来回回的讨论. 为了说明我所说的内容,这是两个例子: // Using the constructor SqlConnection myConnection = new SqlConnection(connectionString); // Using a static factory method IDbConnection myCon

  • Java设计模式之工厂方法和抽象工厂

    全网最详细的工厂设计模式,本文主要是创建型设计模式中的工厂方法和抽象工厂,先由传统实现方式引出问题,接着对代码改进到简单工厂,后扩展到工厂方法,最后是抽象工厂模式,文中包括概念理解和相关实现代码. 读者可以拉取完整代码本地学习,实现代码均测试通过上传到码云 一.引出问题 如果有一个客户老王,需要购买产品,产品分别是A.B.C. 如果用传统方法实现,分别定义A.B.C三个类,再分别创建他们所属的方法. 在客户对象中再分别调用他们的方法. Product ClientProduct(String o

  • Java设计模式之静态工厂模式详解

    本文实例讲述了Java设计模式之静态工厂模式.分享给大家供大家参考,具体如下: 静态工厂模式(static factory)也叫简单工厂模式. 涉及到3个角色:工厂类角色,抽象产品类角色和具体产品类角色. 抽象产品类可以使用接口或者父类来描述产品对象的行为特征. 具体产品类就是某一具体的对象. 静态工厂类有一个静态的方法,含有判断逻辑,决定要创建哪一种具体的产品对象. 其设计模式如下: 抽象产品类  IProduct package org.test.design.sf; public inte

随机推荐