IoC 是典型的⼯厂模式,如何使⽤用⼯厂模式创建 bean, IoC 通过⼯厂模式创建 bean 有以下两种⽅式

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="car" class="com.sunjian.factory.StaticCarFactory" factory-method="getCar">
        <constructor-arg value="1"></constructor-arg>
    </bean>

    <!-- 实例工厂模式 -->
    <bean id="carFactory" class="com.sunjian.factory.InstanceCarFactory"></bean>
    <bean id="car2" factory-bean="carFactory" factory-method="getCar">
        <constructor-arg value="2"></constructor-arg>
    </bean>

</beans>

class

package com.sunjian.entity;

public class Car {
    private Integer id;
    private String brand;

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

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public Car(){
        System.out.println("创建了Car对象");
    }

    public Car(Integer id, String brand) {
        this.id = id;
        this.brand = brand;
    }

    @Override
    public String toString() {
        return "Car{" +
                "id=" + id +
                ", brand='" + brand + '\'' +
                '}';
    }
}
package com.sunjian.factory;

import com.sunjian.entity.Car;

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

/**
 * 实例工厂
 * @author sunjian
 * @date 2020/3/14 14:43
 */
public class InstanceCarFactory {
    private Map<Integer, Car> map;
    public InstanceCarFactory(){
        map = new HashMap<Integer, Car>();
        map.put(1, new Car(1, "起亚K2"));
        map.put(2, new Car(2, "起亚K5"));
    }

    public Car getCar(Integer id){
        return map.get(id);
    }
}
package com.sunjian.factory;

import com.sunjian.entity.Car;

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

/**
 * 静态工厂
 * @author sunjian
 * @date 2020/3/14 14:38
 */
public class StaticCarFactory {
    private static Map<Integer, Car> map;
    static {
        map = new HashMap<Integer, Car>();
        map.put(1, new Car(1, "起亚K2"));
        map.put(2, new Car(2, "起亚K5"));
    }

    public static Car getCar(Integer id){
        return map.get(id);
    }
}

test class

package com.sunjian.test;

import com.sunjian.entity.Car;
import com.sunjian.factory.InstanceCarFactory;
import com.sunjian.factory.StaticCarFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author sunjian
 * @date 2020/3/14 14:40
 */
public class Test2 {
    public static void main(String[] args) {
        Car car = StaticCarFactory.getCar(1);
        Car car2 = StaticCarFactory.getCar(2);
        System.out.println(car);
        System.out.println(car2);

        InstanceCarFactory instanceCarFactory = new InstanceCarFactory();
        Car car3 = instanceCarFactory.getCar(1);
        Car car4 = instanceCarFactory.getCar(2);
        System.out.println(car3);
        System.out.println(car4);

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("factory.xml");
        Car car5 = (Car) applicationContext.getBean("car");
        System.out.println(car5);
    }
}

OK.

Spring框架——IOC 工厂方法的更多相关文章

  1. spring框架中工厂方法的创建和销毁

    1.编写接口UserSerivce: public interface UserService { public void sayHello(); } 2.编写实实现接口的方法,在该方法中除了要实现接 ...

  2. Spring框架IOC容器和AOP解析 非常 有用

    Spring框架IOC容器和AOP解析   主要分析点: 一.Spring开源框架的简介  二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面 ...

  3. 自己动手写Spring框架--IOC、MVC

    对于一名Java开发人员,我相信没有人不知道 Spring 框架,而且也能够轻松就说出 Spring 的特性-- IOC.MVC.AOP.ORM(batis). 下面我想简单介绍一下我写的轻量级的 S ...

  4. Spring框架IOC容器和AOP解析

    主要分析点: 一.Spring开源框架的简介  二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置  一.S ...

  5. spring框架--IOC容器,依赖注入

    思考: 1. 对象创建创建能否写死? 2. 对象创建细节 对象数量 action  多个   [维护成员变量] service 一个   [不需要维护公共变量] dao     一个   [不需要维护 ...

  6. Spring框架---IOC装配Bean

    IOC装配Bean (1)Spring框架Bean实例化的方式提供了三种方式实例化Bean 构造方法实例化(默认无参数,用的最多) 静态工厂实例化 实例工厂实例化 下面先写这三种方法的applicat ...

  7. Spring框架IOC和AOP介绍

    说明:本文部分内容参考其他优秀博客后结合自己实战例子改编如下 Spring框架是个轻量级的Java EE框架.所谓轻量级,是指不依赖于容器就能运行的.Struts.Hibernate也是轻量级的. 轻 ...

  8. Spring框架——IOC&DI

    Spring Spring 目标 内容 Spring与web整合的原理 Spring 中包含的关键特性 Spring架构图 企业级框架 企业级系统 IOCDI IOC DI IOC和DI 为什么使用依 ...

  9. Spring框架IOC,DI概念理解

    1.什么是框架? 框架是一种重复使用的解决方案,针对某个软件开发的问题提出的. Spring框架,它是一个大型的包含很多重复使用的某个领域的解决方案. Spring的理念:不要重复发明轮子. 2.Sp ...

随机推荐

  1. HTML5图片预览 放大

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. 【转】从技术和成本算笔账,自动驾驶L3过渡到L4有多难?

    转自:http://www.sohu.com/a/160479216_121787 从技术和成本算笔账,自动驾驶L3过渡到L4有多难? 2017-07-28 09:34 英伟达解决方案架构师程亚冰认为 ...

  3. Spring Boot 鉴权之—— springboot2.0.4+mybatis 整合的完整用例

    自上一篇文章的基础上,Spring Boot 鉴权之—— JWT 鉴权我做了一波springboot2.0.4+mybatis 的整合. 参考文章: Spring Boot+Spring Securi ...

  4. Docker Linux下安装

    下载脚本并运行安装: sudo wget -qO- https://get.docker.com/ | sh wget:下载文件工具, -q:不显示指令执行过程, -O-:-O-以'-'作为file参 ...

  5. 移动 H5 首屏秒开优化方案探讨

    转载bang大神文章,原文<移动 H5 首屏秒开优化方案探讨>,此文仅仅用做自学与分享! 随着移动设备性能不断增强,web 页面的性能体验逐渐变得可以接受,又因为 web 开发模式的诸多好 ...

  6. 为什么我们要让人工智能玩游戏:微软Project AIX

    <我的世界>游戏 2016年7月注:Project AIX已正式更名为Project Malmo 注:本文编译自Project AIX: Using Minecraft to build ...

  7. [置顶] Python 使用itchat 对微信好友数据进行简单分析

    人生苦短,我用Python! Python 热度一直很高,我感觉这就是得益于拥有大量的包资源,极大的方便了开发人员的需求. 最近在一个微信公众号上看到一个调用微信 API 可以对微信好友进行简单数据分 ...

  8. 视频描述(Video Captioning)近年重要论文总结

    视频描述 顾名思义视频描述是计算机对视频生成一段描述,如图所示,这张图片选取了一段视频的两帧,针对它的描述是"A man is doing stunts on his bike", ...

  9. Implementing 5G NR Features in FPGA

    目录 论文来源 论文简介 基本原理 论文创新点 借鉴之处 论文来源 2018 European Conference on Networks and Communications (EuCNC),Ja ...

  10. On Fixed-Point Implementation of Log-MPA for SCMA Signals

    目录 论文来源 摘要 基本概念 1.SCMA 2.SCMA编码器 研究内容 1.基于Log-MPA的SCMA解码器实现过程 论文创新点 借鉴之处 论文来源 本论文来自于IEEE WIRELESS CO ...