Spring 学习笔记

Spring 框架是由于软件开发的复杂性而创建的。Spring 使用的是基本的 JavaBean 来完成以前只可能由 EJB 完成的事情。

Spring

一. Spring Framework

Spring 是一个轻量级框架,目的是为了让对象之间的耦合性降低(解耦),方便后期代码的维护;
Spring 本质上就是一个 Bean 工厂,应用程序中所有的对象生命周期都是由 Spring 来管理的;

二. Spring 中对象的注入方式

  • set 注入(实体类中的属性必须有 set 方法)

  • 构造方法注入(实体类中必须有带参数的构造方法)

三. Spring 对象模式

Spring 的配置文件中,一个 bean 标签代表一个对象,创建的时候默认是采取单例模式,若想采取原型模式,则要给 bean 标签加上 scope="prototype"

  • 单例模式
public class Single {
    // 自身成为自身的静态属性
    private static Single s = null;

    // 构造方法私有化
    private Single() {}

    // 提供一个外部可访问的静态方法
    public static synchronized Single getSingle() {
        if (s == null) {
            s = new Single();
        }
        return s;
    }
}
  • 原型模式 与单例模式相反,每次获取的对象都是新的对象
  • 工厂模式 根据配置文件,动态的获取一组类中某个类的实例,一般来讲这一组类都实现了同一个接口或继承了同一个类
  • 代理模式
  • Hibernate 懒加载返回的是一个代理对象
  • Struts 的 action 代理

四. Spring 核心

  • IOC(控制反转)/ DI(依赖注入)
  • AOP(面向切面编程)
IOC / DI

在没有出现 Spring 框架之前,一个对象调用另一个对象的方法时,需要先在当前对象中创建出另一个对象,这些对象之间才有了关系(耦合性较高),而Spring 框架,应用程序中所有的对象都是由 Spring 容器来管理它们的生命周期,此时一个对象需要调用另一个对象的方法时,Spring 容器会把相对应的对象给你,则不需要在当前类创建新的对象

把 SessionFactory 对象注入到 Dao 层,把 Dao 层对象注入到 Service 层,把 Service 层对象注入到 Action 层

AOP

在程序运行到某一个点时(切入点),使程序暂时停下来,去执行人为切入的一段代码,再继续执行原来的业务逻辑代码,切入的代码并不会影响到原来业务逻辑代码的执行,一般用于事务管理或日志管理

静态工厂注入,实例工厂注入

五. Spring 的通知类型

  1. 前置通知:程序执行到切入点(Service 层的方法)之前执行切入的代码
  2. 后置通知:程序执行到切入点(Service层的方法)之后执行切入的代码
  3. 异常通知:切入点抛出异常
  4. 环绕通知
  5. 引入通知

六. SSH 框架整合

  1. 创建实体类,配置映射文件,通过 Hibernate SchemaExport 对象创表
  2. 编写 Dao 层接口和实现类(封装 BaseDao)
  3. 编写 Service 层接口和实现类
  4. web.xml中配置 Struts2 的核心过滤器,创建 Action,并在 struts.xml中配置 Action 信息
  5. web.xml中配置 Spring 的监听器,并指定读取的文件路径
  6. 在 Spring 的配置文件中配置:dataSource,sessionFactory,transactionManager(事务管理器),tx:advice(事务传播特性),aop(面向切面编程)

七. Spring 容器什么时候被创建?

​ Tomcat 服务器启动的时候,会读取 web.xml配置文件,加载 Spring 的监听器,Spring 监听器此时就会去读取 Spring 的配置文件(applicationContext.xml) 后实例化所有的对象

Original: https://www.cnblogs.com/xiqingbo/p/java-25.html
Author: Schieber
Title: Spring 学习笔记

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/598688/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Rabbitmq从安装到简单入门

    1:Rabbitmq是什么? RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。 它由以高性能、健壮以及可伸缩性出名的 Erlang …

    数据库 2023年6月6日
    086
  • 线程简介

    线程简介以多线程在Windows操作系统中的运行模式为例:Windows操作系统是 多任务操作系统,它以进程为 单位。每个独立执行的程序都被称为 进程( 比如正在运行的QQ是一个进…

    数据库 2023年6月16日
    0125
  • 简单的使用java操作hdfs

    一:创建maven项目 导入maven org.apache.hadoop hadoop-hdfs 2.7.6 org.apache.hadoop hadoop-common 2….

    数据库 2023年6月11日
    089
  • 配置 Windows Terminal 步骤

    配置 Windows Terminal 的步骤 前提:在微软商店下载两个软件 Windows Terminal PowerShell oh-my-posh 配置 oh my pos…

    数据库 2023年6月6日
    0129
  • Java中的线程安全与线程同步

    1.为什么需要线程同步 什么是线程安全:指在 被多个线程访问时,程序可以 持续进行正确的处理。 1.1.线程安全问题 案例:通过抢优惠例子说明线程安全问题 public class…

    数据库 2023年6月6日
    089
  • Python 字符串的常用方法

    Python 包含6种数据类型,其中Number(数字)、String(字符串)、Tuple(元组)、 List(列表)、Dictionary(字典)、Set(集合); 这节主要讲…

    数据库 2023年6月16日
    076
  • jsp规范

    jsp规范 一。jsp介绍:来自于javaee规范里面的一种jsp规范制定了如何开发jsp文件代替响应对象将处理结果写入到响应体的开发流…

    数据库 2023年6月11日
    083
  • break&continue&return

    作用 1. 跳出整个循环体,进入循环下面的语句 2. 在多层嵌套循环中,break跳出内层循环 3. 可以使用带标签的break语句,跳出外层循环 编码 //break终止循环 p…

    数据库 2023年6月14日
    0104
  • SQL Server2019安装

    检查.NET 环境 打开控制面板下面的程序,选择 启用或关闭 Wind…

    数据库 2023年6月6日
    098
  • 使用归并排序思想解决逆序对数量问题

    概述 归并排序算法,想必诸位都十分熟悉。其基本思想也就是 分治。整个排序过程分成两部分–分治法将问题 分(divide)成一些小的问题然后递归求解,而 治(conque…

    数据库 2023年6月11日
    096
  • 名言小抄(六)

    1.一个人对世界最大的贡献就是让自己快乐起来。 4.人生最好的三个词 久别重逢、失而复得、虚惊一场却没有,和好如初 ,只因和好容易,如初太难。很多东西,一旦打破,就很难圆满。有些故…

    数据库 2023年6月16日
    081
  • springboot~HandlerFunction和RouterFunction

    HandlerFunction和RouterFunction RouterFunction为我们应用程序添加一个新的路由,这个路由需要绑定一个HandlerFunction,做为它…

    数据库 2023年6月6日
    076
  • windows和乌班图使用固定的ip地址

    windows设置固定的ip地址:查看网上的方法很多人说修改无线网卡的配置:自动获取ip—-》使用下面的IP地址这样修改以后无法使用wifi上外网但是确实可以添加一个固…

    数据库 2023年6月11日
    0120
  • [javaweb]监听器统计网页在线人数

    监听器 1.配置监听器 package com.javaweb.controller; import javax.servlet.ServletContext; import ja…

    数据库 2023年6月16日
    094
  • 20 行代码!带你快速构建基础文本搜索引擎 ⛵

    💡 作者:韩信子@ShowMeAI📘 机器学习实战系列:https://www.showmeai.tech/tutorials/41📘 深度学习实战系列:https://www.s…

    数据库 2023年6月14日
    083
  • 实用技术博客收集

    作者:sczyh30java全栈知识体系microsoft cloud design pattern Original: https://www.cnblogs.com/rache…

    数据库 2023年6月11日
    0116
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球