Spring框架梳理总结(适合多刷)

前言

在看完上一篇文章每个知识点的时候
Spring框架从入门到学精(全)

大部分人对spring还是有些懵懂
可能是知识点比较凌乱所导致
以下这篇文章将带你二刷spring框架
本篇文章主要是理清思路逻辑,有个大纲
学习其细节还需要到上面的文章进行学习

大纲总结

  • IOC方便解耦,简便开发
  • AOP不改变源代码,增加其功能
@Test
    public void testCollection1() {
        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean1.xml");
        类名 对象名 = context.getBean("对象名", 类名.class);
        对象名.test();
    }

1.BeanFactory,只有创建对象才会getBean
2.ApplicationContext是BeanFactory子接口,加载配置就会创建对象
3.ApplicationContext有一些特别的实现类
特别是ClassPathXmlApplicationContext,在src目录下可以写文件名
如果是FileSystemXmlApplicationContext,在src目录下,必须写绝对路径

工厂bean
spring有两种类型,一种是上面的普通bean,另一种是工厂bean
普通bean,在配置文件中,定义的bean类型就是返回类型
而工厂bean返回类型可以不同
1.创建类,让这个类作为工厂bean,实现接口FactoryBean
2.实现接口内的方法,定义返回的bean类型

public class MyBean implements FactoryBean<Course> {

    //定义返回bean
    @Override
    public Course getObject() throws Exception {
        Course course = new Course();
        course.setCname("abc");
        return course;
    }
}

bean作用域scope
singleton 单实例对象,默认是这个。加载spring配置的时候就会创建对象
prototype 多实例对象。调用getBean方法的时候就会创建对象。

外部属性文件引入
引入context的名称空间,用于jdbc.url等
还有<context:component-scan base-package="com.bao"></context:component-scan>扫描包名

xmlns:context="http://www.springframework.org/schema/context"

注入注解
@Autowired:根据属性类型自动装配
@Qualifier(value=" "):根据属性名称自动注入
@Resource:可根据属性类型或者名称注入
@Value:注入普通类型的注入

切入点切入面
ref为实际增强的类,method为方法名,pointcut-ref为切入点与切入面连接的点

<aop:config>
    <!--切入点-->
    <aop:pointcut id="p" expression="execution(* 全限定名称路径名.buy(..))"/>
    <!--配置切面-->
    <aop:aspect ref="类名">
        <!--增强作用在具体的方法上-->
        <aop:before method="方法名" pointcut-ref="p"/>
    </aop:aspect>
</aop:config>

事务
事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操作都失败

<!--创建事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <!--注入数据源-->
    <property name="dataSource" ref="dataSource"></property>
</bean>

开启事务注解引入名称空间 tx

<!--开启事务注解-->
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>

没有隔离会发生以下三种情况:脏读、不可重复读、虚(幻)读

脏读:一个未提交事务读取到另一个未提交事务的数据(事件回滚,导致A读取B还未提交的事务,应该读取原始数据)
不可重复读:一个未提交的事务,获取到了一个已经提交修改的事务(A读取B提交的事务,正常来说都提交了才能读取)
幻读:一个未提交的数据获取到了另一个事务添加数据

1. 概念详解

1.1 IOC与AOP

主要的核心是IOC(控制反转)和AOP(动态代理)
而这两个核心也是面试的时候经常问的问题

  • IOC:控制反转,也就是控制权反转,传统的方式自个创建对象以及依赖关系等。反转之后,变成了可以由spring自行创建以及依赖关系的注入。总体来说就是反转对象创建方式,将创建的方式提交给spring也就是程序自已来执行。(以前都是自已去new,现在只需要告诉中介需求,中介给你送过来)

  • AOP:动态代理,实现代码增强的功能,而不会显得冗余复杂
    每个代码模块各司其职,灵活组合,达到一种可配置的、可插拔的程序结构

1.2 IOC与DI

上面讲解了IOC的主要概念,现在开始理清DI的概念区别
IOC的控制反转向spring中索取,也就是向中介管理索取
DI 正是实现 IoC 的方法和手段

一个重要特征是反射,它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入

  • 注入方式: 1.set方式注入 2.构造方法注入 3.字段注入
  • 注入类型: 1.值类型注入 2.引用类型注入

1.3 接口区别

  • BeanFactory,Spring内部使用接口,不提供给开发人员,加载配置xml解析不会创建,只有创建对象才会getBean
  • ApplicationContext是BeanFactory子接口,功能强大,开发人员可使用,加载配置就会创建对象

ApplicationContext有一些特别的实现类

  • ClassPathXmlApplicationContext,在src目录下可以写文件名
  • FileSystemXmlApplicationContext,在src目录下,必须写绝对路径

在这里插入图片描述

2. 注入方式

2.1 基本类型

set方式注入
值类型用value注入
引用类型用ref注入
无参构造
在这里插入图片描述
有参数构造
constructor-arg是有参构造函数的属性
在这里插入图片描述
p名称空间注入
set注入,spring特有,为了简化<property>写法
引用名称空间p
xmlns:p="http://www.springframework.org/schema/p"
在这里插入图片描述
注入其他属性
在这里插入图片描述

2.2 复杂类型

数组注入
在这里插入图片描述

列表注入
在这里插入图片描述
set类型注入
在这里插入图片描述
map类型注入
在这里插入图片描述
注入对象属性
在这里插入图片描述
测试文件
以上读取的测试文件通过获取xml文件
在这里插入图片描述

3. 配置属性

其中主要通过bean来进行配置
具体各个属性概念大致如下

  • bean元素:spring容器管理对象
  • name属性:对象名字,获得对象时getBean(“name值”)
  • class属性:对象的完整类名
  • id属性:与name属性一样,但该id不可重复

spring中的配置属性具体概念如下
本身默认的时候是单实例
通过测试代码也可得知
在这里插入图片描述
所谓的单实例或者是多实例
主要通过配置bean标签内部的scope属性

  • singleton 单实例对象,默认是这个。加载spring配置的时候就会创建对象
  • prototype 多实例对象。调用getBean方法的时候就会创建对象。

还有一个属性是自动装配

bean标签属性autowire,配置自动装配
autowire属性常用两个值:
byName根据属性名称注入 ,注入值bean的id值和类属性名称一样
byType根据属性类型注入

在这里插入图片描述

bean生命周期
具体生命周期的步骤如下
从创建对象到对象销毁的过程

1.为构造器创建bean的实列(无参构造)
2.为bean的属性设置和对其他bean引用(调用set方法)
3.bean初始化配置
4.获取bean
5.销毁bean

4. 注解注入

创建对象提供注解
@Component: 游戏中普通的注解
@Service :业务逻辑层以及Service层
@Controller: 外部层
@Repository :dao层即持久层
功能是一样的,都可以用来创建对象,只不过把每个对象用在不同地方,以便查看

以上都要开启组件扫描
通过context的名称空间
在这里插入图片描述
而且可以通过该标签设置可过滤还是不可过滤的东西
在这里插入图片描述
通过值的注入
@Autowired:根据属性类型自动装配
@Qualifier(value=" "):根据属性名称自动注入
@Resource:可根据属性类型或者名称注入
@Value:注入普通类型的注入
在这里插入图片描述
基于注解类,没有了xml,那么就不是扫描xml文件
而是注解类的函数
主要用法如下
在这里插入图片描述

5. AOP

动态代理,也就是只增强代码部分

基本的概念

  • 连接点:类中有哪些方法可以被增强,这些方法称之为连接点
  • 切入点:实际被增强的方法
  • 通知(增强):实际增强的逻辑部分称之为通知(增强)
  • 通知有多种类型:前置通知、后置通知、环绕通知(前后执行)、异常通知(只有异常才会通知)、最终通知(类似finally)
  • 切面:把通知应用到切入点的过程,是一个动作的过程

主要通过代理类来实现代码增强的功能
两个最主要的类为
在这里插入图片描述

代码截图如下
在这里插入图片描述
在这里插入图片描述

  • 20
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
SpringSecurity和SpringCloud是两个独立的框架,但它们可以一起使用来构建安全的分布式系统。SpringSecurity是一个用于身份验证和授权的框架,可以帮助我们保护应用程序的安全性。而SpringCloud是一个用于构建分布式系统的框架,它提供了一系列的工具和组件,用于处理分布式系统中的各种问题,例如服务发现、负载均衡、配置管理等。 在引用[1]中提到的文章中,作者介绍了他对SpringSecurity的深入研究和源码分析的经历。他从最初只会简单接入SpringSecurity,到深入了解整个体系,深入源码,逐步提升了自己的技能。这也说明了SpringSecurity的重要性和价值。 在引用[2]中提到了SpringSecurity OAuth2的默认过滤器链和自定义过滤器链。默认的过滤器链只处理特定的请求,而自定义的过滤器链则处理其他请求。需要注意的是,自定义过滤器链中并没有解析Token的过滤器,这可能导致即使加了Token,权限满足的情况下,仍然返回403未授权的错误。在SpringSecurity OAuth2体系中,SpringSecurity主要负责授权操作,而认证操作通常由资源服务器处理。 在引用[3]中提到了整合SpringCloud和SpringSecurity OAuth2的搭建流程。作者通过这篇文章梳理了整个流程,帮助读者理清思路。这对于那些想要构建安全的分布式系统的开发者来说是非常有价值的。 综上所述,SpringSecurity和SpringCloud是两个独立的框架,但可以一起使用来构建安全的分布式系统。SpringSecurity负责身份验证和授权,而SpringCloud提供了一系列工具和组件来处理分布式系统中的各种问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农研究僧

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值