
Spring
文章平均质量分 92
记录一些有关Spring的知识
十八岁讨厌编程
没事就喜欢画思维导图
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
[Spring Framework]Spring事务角色与事务属性
思考出现异常事务会自动回滚,这个是我们之前就已经知道的,noRollbackFor是设定对于指定的异常不回滚,这个好理解rollbackFor是指定回滚异常,对于异常事务不应该都回滚么,为什么还要指定?及其子类进行事务回顾,其他的异常类型是不会回滚的,对应IOException不符合上述条件所以不回滚。介绍完上述属性后,还有最后一个事务的传播行为,为了讲解该属性的设置,我们需要完成下面的案例。运行后,就能实现我们想要的结果,不管转账是否成功,都会记录日志。这个结果和我们想要的不一样,什么原因?......原创 2022-07-17 23:19:18 · 642 阅读 · 16 评论 -
[Spring Framework]Spring事务管理与@Transactional注解源码解析
事务作用在数据层保障一系列的数据库操作同成功同失败Spring事务作用在数据层或业务层保障一系列的数据库操作同成功同失败数据层有事务我们可以理解,为什么业务层也需要处理事务呢?举个简单的例子,转账业务会有两次数据层的调用,一次是加钱一次是减钱把事务放在数据层,加钱和减钱就有两个事务没办法保证加钱和减钱同时成功或者同时失败这个时候就需要将事务放在业务层进行处理。Spring为了管理事务,提供了一个平台事务管理器commit是用来提交事务,rollback是用来回滚事务。名称类型。......原创 2022-07-17 17:51:24 · 676 阅读 · 1 评论 -
[Spring Framework]AOP经典案例、AOP总结
概念AOP(AspectOrientedProgramming)面向切面编程,一种编程范式作用在不惊动原始设计的基础上为方法进行功能增强核心概念代理(Proxy)SpringAOP的核心本质是采用代理模式实现的连接点(JoinPoint)在SpringAOP中,理解为任意方法的执行切入点(Pointcut)匹配连接点的式子,也是具有共性功能的方法描述通知(Advice)若干个方法的共性功能,在切入点处执行,最终体现为一个方法切面(Aspect).........原创 2022-07-17 13:49:54 · 768 阅读 · 2 评论 -
[Spring Framework]AOP配置管理③(AOP通知获取数据)
有了这个特性后,我们就可以在环绕通知中对原始方法的参数进行拦截过滤,避免由于参数的问题导致程序无法正确运行,保证代码的健壮性。在catch方法中就可以获取到异常,至于获取到异常以后该如何处理,这个就和你的业务需求有关了。这块比较简单,以前我们是抛出异常,现在只需要将异常捕获,就可以获取到原始方法的异常信息了。就是方法的返回值,我们是可以直接获取,不但可以获取,如果需要还可以进行修改。调用无参数的proceed,当原始方法有参数,会在调用的过程中自动传入参数。这两个通知类型可以获取,具体如何获取?......原创 2022-07-16 23:43:46 · 606 阅读 · 7 评论 -
[Spring Framework]AOP配置管理②(AOP通知类型)
我们前面的案例中,出现过@Before,这个就属于通知类型。它所代表的含义是将通知添加到切入点方法执行的前面。那么我们很自然地就想到,有没有可以添加到其他位置的?AOP通知描述了抽取的共性功能,根据共性功能抽取的位置不同,最终运行代码时要将其加入到合理的位置通知具体要添加到切入点的哪里?前置通知后置通知环绕通知(重点)返回后通知(了解)抛出异常后通知(了解)前置通知,追加功能到方法执行前,类似于在代码1或者代码2添加内容后置通知返回后通知抛出异常后通知环绕通知,}}............原创 2022-07-16 17:53:22 · 887 阅读 · 6 评论 -
[Spring Framework]AOP配置管理①(AOP切入点表达式)
切入点表达式就是要找到需要增强的方法,所以它就是对一个具体方法的描述,但是方法的定义会有很多,所以如果每一个方法对应一个切入点表达式,想想这块就会觉得将来编写起来会比较麻烦,有没有更简单的方式呢?这个使用率较低,描述子类的,咱们做JavaEE开发,继承机会就一次,使用都很慎重,所以很少用它。我们使用通配符描述切入点,主要的目的就是简化之前的配置,具体都有哪些通配符可以使用?单个独立的任意符号,可以独立出现,也可以作为前缀或者后缀的匹配符出现。)代表参数可以没有,可以一个,可以多个,不限制类型。.......原创 2022-07-16 13:03:17 · 522 阅读 · 2 评论 -
[Spring Framework]AOP工作流程
所以要对原始对象进行增强,就需要对原始对象创建代理对象,在代理对象中的方法把通知[如MyAdvice中的method方法]内容加进去,就实现了增强,这就是我们所说的代理(Proxy)。目标对象就是要增强的类[如BookServiceImpl类]对应的对象,也叫原始对象,不能说它不能运行,只能说它在运行的过程中对于要增强的内容是缺失的。注意第1步在容器启动的时候,bean对象还没有被创建成功。要被实例化bean对象的类中的方法和切入点进行匹配。判定bean对应的类中的方法是否匹配到任意切入点。......原创 2022-07-16 11:57:22 · 685 阅读 · 0 评论 -
[Spring Framework]AOP初识
Spring有两个核心的概念,一个是IOC/DI,一个是就是AOP。AOP是在不改原有代码的前提下对其进行增强。面向切面编程,一种编程范式,指导开发者如何组织程序结构。面向对象编程我们都知道OOP是一种编程思想,那么AOP也是一种编程思想,编程思想主要的内容就是指导程序员该如何编写程序,所以它们两个是不同的编程范式。AOP的作用在不惊动原始设计的基础上为其进行功能增强,前面咱们有技术就可以实现这样的功能即代理模式。名称类型配置类注解位置配置类定义上方作用开启注解格式AOP功能。......原创 2022-07-16 01:12:38 · 592 阅读 · 4 评论 -
[Spring Framework]Spring整合Junit
名称@RunWith类型测试类注解位置测试类定义上方作用设置JUnit运行器属性value(默认)运行所使用的运行期。原创 2022-07-15 22:15:42 · 752 阅读 · 2 评论 -
[Spring Framework]Spring整合MyBatis
这里的AccountDao,Mybatis已经使用mapper动态代理为我们自动生成了实现类,这个实现类已经存在于容器中,所以我们可以直接用用类型自动装配依赖。Mybatis的基础环境我们已经准备好了,接下来就得分析下在上述的内容中,哪些对象可以交给Spring来管理?注意我们没有写实现类,因为使用的是mapper动态代理,Mybatis会自动帮我们创建实现类。整合Mybatis,就是将Mybatis用到的内容交给Spring管理,分析下配置文件。从图中可以获取到,真正需要交给Spring管理的是。....原创 2022-07-15 20:33:42 · 1184 阅读 · 3 评论 -
[Spring Framework]注解开发④(第三方bean管理)
名称@Bean类型方法注解位置方法定义上方作用设置该方法的返回值作为spring管理的bean属性value(默认)定义bean的idhttpshttpshttpshttpshttpshttpshttpshttps。原创 2022-07-14 23:32:29 · 793 阅读 · 12 评论 -
[Spring Framework]注解开发③(依赖注入)
Spring为了使用注解简化开发,并没有提供、对应的注解,只提供了自动装配的注解实现。我们有一个Spring配置类:另个接口,两个实现类,且他们均在impl文件夹中:工程结构:在BookServiceImpl类的bookDao属性上添加注解然后我们运行测试demo:结果成功:为什么setter方法可以删除呢?这是因为自动装配基于反射设计创建对象并通过暴力反射为私有属性进行设值,普通反射只能获取public修饰的内容,暴力反射除了获取public修饰的内容还可以获取private修改的内容,所以此原创 2022-07-14 16:55:02 · 910 阅读 · 8 评论 -
[Spring Framework]注解开发②(注解配置scope、生命周期钩子)
首先我们描述一下项目背景:有一个配置类,用来扫描对应impl包中的注解:有一个实现类BookDaoImpl3(在impl包中):接下来我们就说说如何用注解实现:@Scope我们可以运行一个demo来试验一下:结果:然后我们将它变为非单例模式:再运行结果,结果为:(1)在BookDaoImpl中添加两个方法,和,方法名可以任意(2)如何对方法进行标识,哪个是初始化方法,哪个是销毁方法?只需要在对应的方法上添加和注解即可。(3)要想看到两个方法执行,需要注意的是只有在容器关闭的时候,才会执行,原创 2022-07-14 13:48:30 · 532 阅读 · 1 评论 -
[Spring Framework]注解开发①(纯注解开发)
Spring可以简化代码的开发,要想真正简化开发,就需要用到Spring的注解开发,Spring对注解支持的版本历程:这一篇文章涉及两个方面:注解开发定义bean用的是2.5版提供的注解,纯注解开发用的是3.0版提供的注解。首先我们准备一下使用代码:一个实现了BookDao接口的BookDaoImpl类一个全新的Spring配置文件接下来我们就是用注解开发去定义bean(将原来的xml配置删掉)。首先在BookDaoImpl类上添加注解:注意:@Component注解不可以添加在接口上,因为接口是无法创原创 2022-07-14 12:18:32 · 611 阅读 · 3 评论 -
[Spring Framework]容器
前文案例中我们创建的方式为:这种方式翻译为:类路径下的XML配置文件除了上面这种方式,Spring还提供了另外一种创建方式为:这种方式翻译为:文件系统下的XML配置文件使用这种方式,运行,会出现如下错误:从错误信息中能发现,这种方式是从项目路径下开始查找配置文件的,所以需要将其修改为:这种方式虽能实现,但是当项目的位置发生变化后,代码也需要跟着改,耦合度较高,不推荐使用。方式一,就是目前案例中获取的方式:这种方式存在的问题是每次获取的时候都需要进行类型转换,有没有更简单的方式呢?方式二:这种方式可原创 2022-07-13 22:43:38 · 597 阅读 · 7 评论 -
[Spring Framework]第三方资源配置管理
前面我们IOC容器中装的都是我们自己写的类,现在我们尝试去管理第三方jar包中的类。此处我们就拿alibaba的druid来做例子:首先我们先引入它的依赖坐标(在项目的配置pom文件中):在引入完坐标之后,我们在Spring的配置文件中直接进行第三方的bean配置:说明:然后我们验证一下是否配置成功:结果为:这说明配置成功!这里要注意我们使用构造器依赖注入还是setter依赖注入,我们不是凭空的去猜测,而是根据这个第三方资源的内部结构来决定的,我们现在可以来看一看DruidDataSource类原创 2022-07-13 20:36:49 · 907 阅读 · 3 评论 -
[Spring Framework]DI依赖注入②(自动装配、集合注入)
在前文我们所提到的setter注入、构造器注入都需要配置,在我看来是有点麻烦的,为了简化我们的代码、提高我们的效率,我们可以使用依赖自动装配,那么什么是依赖自动装配呢?IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配自动装配存在以下几种方式:接下来我们还是借用前文的工程结构来做两个实验:在前文中:我们的Spring配置文件:BookServiceImpl类:App:接下来我们使用自动装配:首先我们将标签删除,然后在标签中添加autowire属性:接下来我们在运行原创 2022-07-12 11:18:04 · 1403 阅读 · 18 评论 -
[Spring Framework]DI依赖注入①
如果我们要向类中传递数据,我们要借助于方法往里面传,这是肯定的。但是这个方法是可以有多种的。于是这里就分出来两种:然后我们再思考:依赖注入描述了在容器中建立bean与bean之间依赖关系的过程,那么如果bean运行需要的是数字或字符串呢?也就是说我们可以再次细分:我们之前使用的就是这种,所以我们复习一下:配置中使用property标签ref属性注入引用类型对象简单数据类型简单数据类型与引用数据类型差不多,区别在于配置的时候不再使用ref,而是使用value我们接下来举一个例子:步骤1:声明属性并原创 2022-07-11 23:54:55 · 480 阅读 · 3 评论 -
[Spring Framework]bean的生命周期以及控制
bean的生命周期就是bean对象从创建到销毁的整体过程。我们在bean的生命周期中可以干一些事情(也就是对他的生命周期进行一些控制),例如创建之后(比如用来初始化需要用到资源),销毁之前(比如用来释放用到的资源)。接下来我们进行尝试:首先项目背景:有一个实现了BookDao接口的是实现类BookDaoImpl:我们把它放到IOC容器中:接下来我们就以这个实现类BookDaoImpl为例子:首先我们在实现类BookDaoImpl中编写两个方法,分别对应着初始化方法、销毁方法:然后我们在Spring的原创 2022-07-11 22:45:59 · 675 阅读 · 1 评论 -
[Spring Framework]bean的实例化
bean本质上就是对象,对象在new的时候会使用构造方法完成,那创建bean也是使用构造方法完成的。接下来我们来说说Spring的IOC实例化对象的三种方式:首先我们来回顾一下使用工厂来创建对象。(1)准备一个OrderDao和OrderDaoImpl类(2)创建一个工厂类OrderDaoFactory并提供一个静态方法(3)编写AppForInstanceOrder运行类,在类中通过工厂获取对象(4)运行后,可以查看到结果如果代码中对象是通过上面的这种方式来创建的,如何将其交给Spring来管理原创 2022-07-11 17:11:18 · 518 阅读 · 2 评论 -
[Spring Framework]DI初次使用、bean基础配置
在前文的IOC初次使用中我们发现:在的类中依然存在对象的new操作,它们之间的耦合度还是比较高:这块该如何解决,就需要用到下面的。步骤①:去除代码中的new,为属性提供setter方法步骤②:修改配置完成注入在配置文件中添加依赖注入的配置注意:配置中的两个bookDao的含义是不一样的对于bean的基础配置,在前面的案例中已经使用过:其中,bean标签的功能、使用方式以及id和class属性的作用,我们通过一张图来描述下:别名的配置说明:例如:我们先配置name,给他起名:在上面代码中我原创 2022-07-11 13:32:35 · 510 阅读 · 2 评论 -
[Spring Framework]核心概念(IOC/DI、IOC容器和Bean)、IOC初次使用
业务层需要调用数据层的方法,就需要在业务层new数据层的对象。如果数据层的实现类发生变化,那么业务层的代码也需要跟着改变,发生变更后,都需要进行编译打包和重部署:所以,现在代码在编写的过程中存在的问题是:耦合度偏高针对这个问题,该如何解决呢?我们就想,如果能把框中的内容给去掉,不就可以降低依赖了么,但是又会引入新的问题,去掉以后程序能运行么?答案肯定是不行,因为bookDao没有赋值为Null,强行运行就会出空指针异常。所以现在的问题就是,业务层不想new对象,运行的时候又需要这个对象,该咋办呢?针原创 2022-07-10 16:54:49 · 745 阅读 · 4 评论 -
SpringFramework初识
Spring框架主要的优势是在和上。简化开发: Spring框架中提供了两个大的核心技术,分别是:1.Spring的简化操作都是基于这两块内容,所以这也是Spring学习中最为重要的两个知识点。2.事务处理属于Spring中AOP的具体应用,可以简化项目中的事务管理,也是Spring技术中的一大亮点。框架整合: Spring在框架整合这块已经做到了极致,它可以整合市面上几乎所有主流框架,比如:Spring并不是单一的一个技术,而是一个大家族,可以从官网的中查看其包含的所有技术。其中有三个我们要着重关注:原创 2022-07-10 12:03:28 · 580 阅读 · 3 评论