Spring及工厂模式概述

简介: Spring及工厂模式概述

Spring 框架出现之前,Java 开发者使用的主要是传统的 Java EE(Java Enterprise Edition)平台。Java EE 是一套用于开发企业级应用程序的规范,其中包含了众多的标准和 API,如 Servlet、JSP、EJB、JPA 等。


在 Java EE 平台中,应用程序通常是基于各种不同的技术和规范进行构建的,这些技术和规范的配置和集成往往需要大量的手工工作和复杂的部署过程。开发者需要手动管理对象的生命周期和依赖关系,并编写大量的样板代码来处理框架和平台所要求的要求。


Spring  框架的出现改变了这种开发方式。它引入了依赖注入和面向切面编程等新概念,通过 IOC 容器来管理对象的创建和依赖关系,简化了应用程序的开发和配置。


Spring 的设计目标之一是提供一种轻量级的框架,使得开发者能够更加专注于业务逻辑的实现而不是框架的配置和集成。


因此,Spring 的出现引领了一种新的开发范式,简化了企业级应用程序的开发流程,提供了更高效和灵活的开发方式,深受 Java 开发者的喜爱。


image.png

Spring 身世

2002年,Rob Johnson 撰写了一本名为《J2EE设计和开发》的书。本书主要概括了当时Java企业应用程序开发的现状以及指出了JavaEE规范中EJB框架的缺陷,并在书中基于普通Java类和设计模式提出了更为简单的解决防范。

同年在《J2EE Devlopment Without EJB》一书中,进一步扩展了 Interface21的代码,衍生而来了一个轻量级J2EE开发解决方案----Spring。

2004年3月在Sourceforge正式发布了Spring框架的第一个版本。

什么是 Spring

Spring是⼀个轻量级的JavaEE解决⽅案,整合众多优秀的设计模式

  • 轻量级
  • 对于运行环境是没有额外要求的
  • 代码移植性高 不需要实现额外接口
  • 整合设计模式
  • 工厂设计模式
  • 代理设计模式
  • 模板设计模式
  • 策略设计模式

什么是设计模式

  1. ⼴义概念 ⾯向对象设计中,解决特定问题的经典代码
  2. 狭义概念 GOF4⼈帮定义的23种设计模式:⼯⼚、适配器、装饰器、⻔⾯、代理、模板…

工厂设计模式

什么是工厂设计模式

  1. 概念:通过⼯⼚类,创建对象
//  反例
User user = new User(); 

UserDAO userDAO = new UserDAOImpl(); 

2.好处:解耦合

  • 耦合:指定是代码间的强关联关系,⼀⽅的改变会影响到另⼀⽅
  • 问题:不利于代码维护
  • 简单:把接⼝的实现类,硬编码在程序中
//  硬编码
UserService userService = new UserServiceImpl(); 

简单的工厂设计模式

  1. 最初的硬编码
//  这个硬编码是有耦合的
UserService userService = new UserServiceImpl(); 
  1. 简单工厂模式设计
public class BeanFactory{
  public UserService getUserService(){
    return new UserServiceImpl();
  }
}

用 BeanFactory 获取:解耦合

UserService userService = BeanFactory.getUserService();
  1. 第2步的简单工厂 BeanFactory 里的 getUserService() 方法其实还是有耦合(解耦不彻底)


改造 BeanFactory 通过反射去获取其对象.

public class BeanFactory{
   
   public UserService getUserService(){
       UserService userService = null;
       try {
           Class clazz =
               Class.forName("com.snow.service.UserServiceImpl");
           userService = (UserService) clazz.newInstance();
       } catch (ClassNotFoundException e) {
           e.printStackTrace();
       } catch (InstantiationException e) {
           e.printStackTrace();
       } catch (IllegalAccessException e) {
           e.printStackTrace();
       }
       return userService;
   }
   
}
  1. 第3步的类路径其实还是有耦合


可以继续改造第3步,将类路径字符型放在配置文件中。

public class BeanFactory{
    
    private static Properties env = new Properties();
    
    static{
        try {
            //第⼀步 获得IO输⼊流
            InputStream inputStream =
                BeanFactory.class.getResourceAsStream("/applicationContext.properties"
                                                     );
            //第⼆步 ⽂件内容 封装 Properties集合中 
            //key = userService value = com.snow.service.UserServiceImpl
            env.load(inputStream);
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
  public UserService getUserService(){
        UserService userService = null;
        try {
            //  该路径是从配置文件读取来的
            Class clazz = Class.forName(env.getProperty("userService"));
            userService = (UserService) clazz.newInstance();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return userService;
  }
    
}

通用的工厂设计

回顾 上一步 简单工厂模式,发现当需要获取多个对象时,就需要多个工厂,这就会造成的大量的代码冗余。

SO , 我们来改造下,通过传入对象的 key, 来获得其对象.

public class BeanFactory{
    public static Object getBean(String key){
        Object ret = null;
        try {
            Class clazz = Class.forName(env.getProperty(key));
            ret = clazz.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ret;
    }
}

总结

总结起来,Spring 的灵魂就是工厂模式的应用.

相关文章
|
6月前
|
XML Java 数据格式
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
47 1
|
2月前
|
Java 数据库连接 数据库
让星星⭐月亮告诉你,SSH框架01、Spring概述
Spring是一个轻量级的Java开发框架,旨在简化企业级应用开发。它通过IoC(控制反转)和DI(依赖注入)降低组件间的耦合度,支持AOP(面向切面编程),简化事务管理和数据库操作,并能与多种第三方框架无缝集成,提供灵活的Web层支持,是开发高性能应用的理想选择。
40 1
|
4月前
|
Java API Spring
Spring5入门到实战------1、Spring5框架概述、入门案例
这篇文章是Spring5框架的入门教程,概述了Spring框架的核心概念和特点,并通过一个创建普通Java类的案例,详细演示了从下载Spring核心Jar包、创建配置文件、编写测试代码到运行测试结果的完整流程,涵盖了Spring IOC容器的使用和依赖注入的基本用法。
|
7月前
|
安全 前端开发 Java
学习从Struts迁移到Spring的策略概述
从Struts框架迁移到Spring框架是一个常见的升级路径,主要是为了利用Spring框架提供的更多功能、更好的模块化支持以及更广泛的社区资源。
110 3
|
7月前
|
安全 Java 大数据
Spring概述、系统架构及核心概念
Spring概述、系统架构及核心概念
208 0
|
6月前
|
XML 开发框架 Java
Spring框架第一篇(Spring概述与IOC思想)
Spring框架第一篇(Spring概述与IOC思想)
|
6月前
|
开发框架 前端开发 Java
Spring概述(1)
Spring概述(1)
50 0
|
7月前
|
前端开发 Java 应用服务中间件
Spring MVC框架概述
Spring MVC 是一个基于Java的轻量级Web框架,采用MVC设计模型实现请求驱动的松耦合应用开发。框架包括DispatcherServlet、HandlerMapping、Handler、HandlerAdapter、ViewResolver核心组件。DispatcherServlet协调这些组件处理HTTP请求和响应,Controller处理业务逻辑,Model封装数据,View负责渲染。通过注解@Controller、@RequestMapping等简化开发,支持RESTful请求。Spring MVC具有清晰的角色分配、Spring框架集成、多种视图技术支持以及异常处理等优点。
89 1
|
7月前
|
安全 Java API
第1章 Spring Security 概述(2024 最新版)(下)
第1章 Spring Security 概述(2024 最新版)
110 0
|
7月前
|
安全 Java 数据安全/隐私保护
第1章 Spring Security 概述(2024 最新版)(上)
第1章 Spring Security 概述(2024 最新版)
114 0