首页 > 其他分享 >Spring5学习随笔-Spring5的基本介绍、工厂设计模式

Spring5学习随笔-Spring5的基本介绍、工厂设计模式

时间:2023-11-13 12:33:06浏览次数:48  
标签:设计模式 Spring EJB 工厂 printStackTrace catch 随笔 Spring5

学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】

第一章、引言

![](/i/l/?n=23&i=blog/3321544/202311/3321544-20231113123010602-1325702857.png)
  1. Spring IOC工厂是Spring框架中的一个核心组件,它负责创建和管理应用程序中的对象实例。IOC(Inversion of Control,控制反转)是Spring框架的基础,它将对象的创建、管理和使用过程中的控制权从应用程序代码中移动到Spring IOC容器中,以实现松耦合、可重用和可测试的代码。
  2. Spring AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,它可以在不修改源代码的情况下,向应用程序中添加新的行为和功能。AOP通过将应用程序划分为多个模块(切面)来实现这一目标,每个模块负责处理特定的功能或关注点,例如安全、日志、事务等。并且是面试中经常问的,尤其是Spring动态代理的底层实现。
  3. 持久层集成,通过持久层整合与现有的持久化进行集成,比如Mybatis,大大提高了效率。
  4. 事务处理,主要分为1.声明式事务、2.编程式事务。里面事务属性的概念是非常高频的面试内容。
  5. MVC框架集成,通过这部分可以和其他Java企业级技术以及非Java技术进行集成,以满足不同应用程序的需求
  6. 注解编程,本质上是一种特殊的Java接口,它可以被应用于类、方法、字段、参数等程序元素上,以提供关于这些元素的额外信息。注解可以包含属性,这些属性可以帮助程序员进一步定义元素的行为和用途。

1.EJB(Enterprise Java Bean)

EJB指的是企业JavaBean 它提供了一种分层的架构模式。

EJB的优点:

  1. 分布式事务处理:EJB支持分布式事务处理,可以通过容器来控制事务,保证数据的一致性。
  2. 组件化开发:EJB的组件化开发方式可以使得应用程序更加可维护、可重用和可扩展,开发效率也更高。
  3. 安全性:EJB提供了安全管理机制,可以对组件进行安全性管理,确保应用程序的安全性。
  4. 集成性:EJB可以很好地与其他JavaEE技术进行集成,如JSP、Servlet、JMS等,可以组成一个完整的企业级应用程序。
  5. 高性能:EJB可以通过容器来实现连接池、线程池等技术,提高了应用程序的性能。

缺点:

  1. 学习曲线较陡峭:EJB需要掌握较为复杂的技术,包括容器、事务管理、安全管理等,需要一定的学习曲线。
  2. 运行环境要求较高:EJB需要依赖于JavaEE容器来运行,需要一定的服务器环境和配置。
  3. 运行效率较低:由于EJB需要在容器中运行,因此会带来额外的开销,使得其运行效率较低。
  4. 部署复杂:由于EJB需要部署在JavaEE容器中,因此部署过程相对复杂。
  5. 可移植性差:不同的JavaEE容器可能对EJB规范的实现有所不同,因此EJB应用程序的可移植性较差。

主要问题:

1.运行环境苛刻。

目前我们主要使用的服务器是Tomcat,最为核心的内容就是Servlet引擎,所有的内容都交给Servlet处理,称为WebServer。但是EJB代码不能运行在Tomcat上,只能运行在EJB容器上。

Weblogic服务器是 Oracle的,满足了servlet所有的功能还有EJB容器,称为ApplicationServer并且收费。

Websphere ApplicationServer 收费 IBM

2.代码移植性差。

运行在Weblogic当中需要使用Weblogic的接口,换一个环境或服务器,那么代码也要变。

总结:EJB重量级的框架,体现在上面两点。

2 什么是Spring

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

  • 轻量级

    1.对于运行环境是没有额外要求的。

    2.可以选择开源的 tomcat reson jetty

    3.也可以运行在 收费的 weblogic websphere

  • 解决方案

    spring解决了 javaEE分层开发当中的每一层问题。

    springmvc解决控制层 Controller的问题

    Aop技术解决了Service 事务控制、日志处理的问题。

    通过持久化解决方案跟mybatis做整合解决DAO的问题

    最大特点:每一个层次都有一个解决。

    所以Spring 是一个完整的解决方案。

  • 整合设计模式,所有的特点都基于一系列设计模式的整合来处理的。

    1.工厂

    2.代理

    3.模板

    4.策略

    ……..

    合理的封装的使用了这些设计模式

3 设计模式

1.广义概念

面向对象设计中、解决特定问题的经典代码

2.狭义概念

GOF4人帮定义的23种设计模式

其中工厂设计模式是最为重要的

4 工厂设计模式

1.什么是工厂设计模式

1.概念:通过工厂类创建对象  不建议new对象
	User user = new User();
	UserDao userDao = new UserDAOImpl();
2.好处:解耦合
	耦合:指的是代码间的强关联关系,一方的改变会影响另一方
	问题:不利于代码维护
	简单理解:把接口的实现类 硬编码在程序中。
	UserService userService = new UserServiceImpl();//一但出现问题,调用者也会出现问题
	实现:将对象的创建过程封装在工厂类中,通过实现静态或实例工厂的方法创建对象,从而降低耦合性。
				将具体的实现类名放在Resource Bundle 文件中可以将代码和配置分离,使得程序更加灵活,
				在资源包中可以将具体的类名作为key,将其具体实现的类名作为value。当我们需要创建对象
				时只需要读取资源包中的类名即可通过反射创建实例,这个方法也同样属于降低耦合,并且使
				得代码更有可移植性和适应性

2.简单工厂的设计

package com.baizhi.basic;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class BeanFactory {
private static Properties env = new Properties();
static {
try {
// 第一步 获得IO输入流
InputStream inputStream = BeanFactory.class.getResourceAsStream("/applicationContext.properties");
// 第二步 文件内容封装到 Properties集合中 key = userService value = com.baizhi.UserServiceImpl
env.load(inputStream);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/*
对象的创建方式
1.直接调用构造方法 创建对象 UserService userService = new UserServiceImpl();
2.通过反射的形式创建对象 解耦合
Class clazz = Class.forName("com.baizhi.basic.UserServiceImpl");
userService = (UserService) clazz.newInstance();

 */

public static 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;
}

public static UserDao getUserDao() {
    UserDao userDao = null;
    try {
        Class<?> clazz = Class.forName(env.getProperty("userDao"));
        userDao = (UserDao) clazz.newInstance();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (InstantiationException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }
    return userDao;
}

}

3.通用工厂的设计

  • 问题

    1.简单工厂存在大量的代码冗余

    ![](/i/l/?n=23&i=blog/3321544/202311/3321544-20231113123027772-1730172478.png)
  • 解决 实现通用工厂

1.一个方法的声明需要五个要素
	1.修饰符 2.返回值类型 3.方法名 4.参数列表 5.try(可选)
public static Object getBean(){
	Object ret = null;
	try(
			Class clazz = Class.forName(env.getProperty(key));
			ret = clazz.newInstance();
	)catch(Exception e)(
			e.printStackTrace();
	)
}
通用工厂 解决了大量的代码冗余
创建一切想要的对象
public static Object getBean(String key){
        Object ret = null;
        try {
            Class clazz = Class.forName(env.getProperty(key));
            ret = clazz.newInstance();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return ret;
    }

4.通用工厂的使用方法

1.定义类型(类)
2.通过配置文件的配置告知工厂(applicationContext.properties)
	key = value
3.通过工厂获得类的对象
	Object ret = BeanFactory.getBean("key")

5.总结

通过了解Spring的基本概念以及工厂设计模式,可以体会到Spring本质就是一个工厂,通过ApplicationContext(配置文件:applicationContext.xml)创建以及管理对象。

 

标签:设计模式,Spring,EJB,工厂,printStackTrace,catch,随笔,Spring5
From: https://www.cnblogs.com/eyewink/p/17828870.html

相关文章

  • Java的设计模式之原型模式
    在某些情况下,需要创建对象的副本,但是复制一个对象的成本可能很高,或者希望避免与对象的具体类耦合。例如,当创建对象的过程较为复杂,或者对象包含大量共享的状态时,使用常规的创建方法可能会导致性能下降。原型模式的解决方案是通过复制现有对象来创建新对象,而不是从头开始构建。这允许......
  • 2023年11月12日每日随笔
    今天,主要进行了ERP的系统的主要功能的揣摩和学习,对于博欧ERP的网站进行参考,可能我的能力不够吧,对于支出收入,那里面的功能我一点也不理解,我中感觉把题目改成输入输出好,接受外界信息,修改外界信息等等,也在网上找到了许多的参考,对于分摊工资也进行了大概了解,有着具体的思路,但是想找一......
  • 结构型设计模式07-享元模式
    结构型设计模式07-享元模式1、享元模式介绍享元模式是一种结构型设计模式,旨在通过共享对象来减少内存使用和提高性能。它主要用于处理大量细粒度对象的情况,其中许多对象具有相似的属性和行为。在享元模式中,对象分为两种类型:内部状态(IntrinsicState)和外部状态(ExtrinsicState)。......
  • 结构型设计模式07-享元模式
    结构型设计模式07-享元模式1、享元模式介绍享元模式是一种结构型设计模式,旨在通过共享对象来减少内存使用和提高性能。它主要用于处理大量细粒度对象的情况,其中许多对象具有相似的属性和行为。在享元模式中,对象分为两种类型:内部状态(IntrinsicState)和外部状态(ExtrinsicState)。......
  • 每日随笔——单例模式
    [实验任务一]:学号的单一仿照课堂的身份证的例子,实现每个同学仅有一个学号这一问题。实验要求:1.画出对应的类图;2.提交源代码;3.注意编程规范。类图 源码:packageCS7;publicclassClient{publicstaticvoidmain(String[]args){StudentIDstu1,s......
  • 每日随笔——原型模式
    [实验任务一]:向量的原型用C++完成数学中向量的封装,其中,用指针和动态申请支持向量长度的改变,使用浅克隆和深克隆复制向量类,比较这两种克隆方式的异同。实验要求:1.画出对应的类图;2.提交源代码(用C++完成);3.注意编程规范。类图 源码:#include<cmath>#include<iostream>usi......
  • 将博客园或者csdn文章复制到自己随笔中
    csdn或者博客园中中有很多优秀的文章,自己习惯在博客园记录,为了便于之后浏览,习惯复制到博客园收藏。问题是csdn中复制全文,在博客园编辑器(TinyMCE编辑器)中粘贴时,图片无法直接粘贴过来,图片多的时候比较麻烦。怎样直接复制粘贴全文?参考:https://www.cnblogs.com/c2soft/articles......
  • 设计模式--Command模式
    命令模式(CommandPattern)是一种行为设计模式,它将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。命令模式主要包含以下几个角色:Command(抽象命令类):声明执行操作的接口。ConcreteCommand(具体命令类):是一个具体的......
  • 设计模式-策略模式
    策略模式(StrategyPattern)属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。其主要目的是通过定义相似的算法,替换ifelse语句写法,并且可以随时相互替换。策......
  • 学习随笔(设计模式:策略模式)
     内容:今天学习了设计模式中的策略模式。1.策略模式是一种定义一系列算法的方法,这些算法都是相同的工作,只是实现不同,通过以相同的方式调用不同的算法,减少算法之间的耦合度。    2.这种设计模式可以用来封装任何类型的规则,需求中在不同时间应用不同的业务规则,就可以......