
spring
文章平均质量分 95
S_H-A_N
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Spring】事务实现原理
在使用事务的时候需要添加@EnableTransactionManagement注解来开启事务,Spring事务底层是通过AOP来实现的,所以启用事务后,同样会向容器中注入一个代理对象创建器,AOP使用的是AnnotationAwareAspectJAutoProxyCreator,事务使用的是InfrastructureAdvisorAutoProxyCreator。Advice通知:定义在切点上需要执行什么样的操作;PointCut切点:定义在哪些方法上使用通知;原创 2023-11-10 10:50:04 · 320 阅读 · 0 评论 -
【Spring】AOP实现原理
对于AOP,在invoke方法中,会先获取目标方法的所有拦截器,Spring会将适用于当前方法的Advisor转为方法拦截器,然后使用责任链模式,对拦截器进行一个个的调用,当然如果当前方法没有对应的拦截器需要执行,直接通过反射执行目标方法即可。此时已经是拦截器链中最后一个,所以此时可以执行目标方法,执行完目标方法,拦截器链的逻辑已经执行完毕,所以对于第二个拦截器来说,会回到环绕通知中的处理逻辑,开始执行目标方法执行之后的后置操作。前置知识:JDK动态代理,可参考。原创 2023-11-09 10:26:30 · 330 阅读 · 0 评论 -
【Spring】AOP实现原理(三):创建代理
AbstractAutoProxyCreator在AbstractAutoProxyCreator的wrapIfNecessary方法中,调用getAdvicesAndAdvisorsForBean方法获取到所有的Advisor之后,就可以创建代理对象了,创建的具体过程在createProxy方法中:创建代理工厂ProxyFactory调用buildAdvisors构建Advisor,入参是getAdvicesAndAdvisorsForBean获取到的Advice和Advisor,里面又调用了Ad原创 2022-05-10 09:30:14 · 679 阅读 · 0 评论 -
【Spring】AOP实现原理(二):Advisor获取
@EnableAspectJAutoProxy@EnableAspectJAutoProxy注解可以用来开启AOP,那么就从@EnableAspectJAutoProxy入手学习一下Spring AOP的实现原理。@EnableAspectJAutoProxy导入了AspectJAutoProxyRegistrar。定义了proxyTargetClass属性,表示是否使用CGLIB生成代理对象,默认返回false,默认是使用JDK动态代理创建代理对象的。@Target(ElementType.T原创 2022-05-09 09:51:26 · 656 阅读 · 0 评论 -
【Spring】AOP实现原理(一):AOP基础知识
AOP相关概念在学习AOP实现原理之前,先了解下AOP相关基础知识。AOP面向切面编程,它可以通过预编译方式或者基于动态代理对我们编写的代码进行拦截(也叫增强处理),在方法执行前后可以做一些操作,一般我们会看到以下几个概念:连接点(JointPoint): AOP进行切入的位置称为连接点,一般指程序中的某个方法,对该方法进行拦截通知(Advice): 在某个连接点执行的操作称为通知,也就是被拦截方法执行前后需要执行的操作称为通知,一共有五种前置通知:作用于被拦截方法执行之前后置通知:作用于被拦原创 2022-05-07 09:51:09 · 391 阅读 · 0 评论 -
【Spring】事务的执行原理(三)
事务的回滚如果获取事务属性不为空,并且抛出的异常是RuntimeException或者Error类型,调用事务管理器中的rollback方法进行回滚如果事务属性为空或者抛出的异常不是RuntimeException,也不是Error,将继续提交事务public abstract class TransactionAspectSupport implements BeanFactoryAware, InitializingBean { /** * 处理抛出异常下的事务原创 2022-05-06 09:51:28 · 516 阅读 · 0 评论 -
【Spring】事务的执行原理(二)
前置知识事务的执行步骤如下:获取事务管理器创建事务执行目标方法捕捉异常,如果出现异常进行回滚提交事务public abstract class TransactionAspectSupport implements BeanFactoryAware, InitializingBean { @Nullable protected Object invokeWithinTransaction(Method method, @Nullable Class<?> ta原创 2022-05-06 09:28:11 · 901 阅读 · 0 评论 -
【Spring】事务的执行原理(一)
在使用事务的时候需要添加@EnableTransactionManagement注解来开启事务,那么就从@EnableTransactionManagement入手查看一下事务的执行原理。@EnableTransactionManagementSpring事务底层是通过AOP来完成的,而Spring AOP基于动态代理实现,可以看到mode方法默认返回了PROXY代理模式,我们只需关注代理模式下的执行流程即可使用@Import导入了TransactionManagementConfiguration原创 2022-04-02 22:08:39 · 1047 阅读 · 0 评论 -
IDEA搭建Spring项目(Maven版)
上一篇文章中,记录了使用jar包的方式搭建Spring项目,有试直接在此基础上改为Maven版,可能目录结构有问题,导致Tomcat启动报找不到spring配置文件的错误,然后又找了另外一种使用maven搭建Spring项目的方式。1.新建Maven项目,勾选Create from archetype,选择webapp2.输入项目名称3.配置Maven,原创 2017-05-29 00:22:45 · 13495 阅读 · 0 评论 -
spring技术内幕笔记:ApplicationContext和Bean的初始化及销毁
spring版本:4.3.8.RELEASEApplicationContex容器自身也有一个初始化和销t毁关闭的过程。ApplicationContext启动的过程是在AbstractApplicationContext中实现的。在使用应用上下文时需要做一些准备工作,这些准备工作在prepareBeanFactory方法中实现,在这个方法中,为容器配置了ClassLoader、Propert原创 2017-07-19 20:50:07 · 1217 阅读 · 0 评论 -
spring技术内幕笔记:IoC容器的依赖注入
在IoC容器初始化的过程中,并没有看到IoC容器对Bean依赖关系的注入。假设IoC容器已经载入了Bean信息,依赖注入的过程是用户第一次向IoC容器索要Bean时触发的,当然也有例外,也就是通过lazy-init属性让容器完成Bean的预初始化。预初始化也是一个完成依赖注入的过程,只不过它是在初始化的过程中完成的。 lazy-init可参考:http://www.cnblogs.com/w原创 2017-07-17 22:03:21 · 879 阅读 · 0 评论 -
Spring In Action(一):基于注解装配bean
@Component注解,将一个类作为组件1.创建一个Spring项目,修改pom文件,添加Spring单元测试所需依赖<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ma原创 2017-05-29 14:25:15 · 1190 阅读 · 0 评论 -
spring技术内幕笔记:IoC容器的初始化过程(3)- BeanDefinition的注册
DefaultListableBeanFactory中,通过一个HashMap来持有和载入BeanDefinition,解析得到的BeanDefinition向IoC容器的beanDefinitionMap注册过程是在载入BeanDefinition完成后进行的。在DefaultListableBeanFactory中实现了BeanDefinitionRegistry接口,这个接口的实现完原创 2017-07-15 09:01:55 · 909 阅读 · 0 评论 -
spring技术内幕笔记:IoC容器初始化过程(2)- BeanDefinition的载入
BeanDefinition载入过程,相当于把定义的BeanDefinition在IoC容器中转换成一个Spring内部表示的数据结构的过程。IoC容器对Bean的管理和依赖注入功能的实现,就是通过对其持有的BeanDefinition进行的各种相关操作完成的。这些BeanDefinition数据在IoC容器中通过HashMap来保存和维护。从DefaultListableBeanFactor原创 2017-07-12 22:25:17 · 813 阅读 · 0 评论 -
Spring In Action(六):处理请求中的参数
Spring in Action(五):基于Java Config的SpringMVCSpringMVC中,客户端发送请求传递参数的方法(1)查询参数(2)路径变量(3)表单参数一、查询参数使用@RequestParam接收http://localhost:8080/hello?username=zhangsan类型的参数(1)修改HelloContro原创 2017-06-04 23:42:14 · 360 阅读 · 0 评论 -
Spring In Action(二):基于XML配置装配bean
虽然项目中常用的是通过注解的方式装配bean,但是XML文件配置作为最初的配置方式,对于Spring学习者来说,还是很有必要了解一下的。原创 2017-05-29 20:52:00 · 745 阅读 · 0 评论 -
Spring In Action(四):基于XML的AOP
上一次,基于注解讲解了AOP,这一次,把它改编为XML版的AOP基于注解的AOP传送门:http://blog.csdn.net/lom9357bye/article/details/728120891、Performance接口,为了防止冲突,本次类名后面都加一个Xml,PerfromanceXml接口/** * 演唱会接口 */public interface Per原创 2017-06-03 14:29:45 · 266 阅读 · 0 评论 -
Spring In Action(三):基于注解的AOP
假如有一场演唱会要上演,演唱会肯定是需要观众来看的,在演出开始之前,观众需要坐到自己的位置上,把手机静音,然后等待演出开始,演出的过程中或者演出结束后,一般少不了鼓掌声,如果演出过程中出现什么问题,可能会中断演出,这些事情就可以抽出来作为观看演出的切面。1、首先为演唱会定义一个接口Performance/** * 演唱会接口 */public interface Performanc原创 2017-05-30 22:45:17 · 540 阅读 · 0 评论 -
Spring in Action(五):基于Java Config的SpringMVC
1、搭建SpringMVC项目可参考搭建Spring项目教程:http://blog.csdn.net/lom9357bye/article/details/72796668需要更改的地方:pom文件,加入servlet-api依赖<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.原创 2017-06-03 17:13:07 · 478 阅读 · 0 评论 -
Spring in Action(八):Spring中使用JDBC
感觉项目中使用注解的情况比较多,因此本文并没有按照书中的内容实现。1、加入所需JDBC和MYSQL所需依赖 junit junit 4.12 test org.springframew原创 2017-06-07 23:03:07 · 306 阅读 · 0 评论 -
SpringMVC文件上传
1、搭建Web项目(1)加入文件上传所需依赖<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http:/原创 2017-06-06 22:02:07 · 309 阅读 · 0 评论 -
springmvc中静态资源无法访问问题
项目目录结构如下:首先尝试了将静态资源文件放在了WEB-INF下,然后在spring配置文件中使用进行了配置<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cont原创 2017-07-01 19:05:12 · 951 阅读 · 0 评论 -
spring技术内幕笔记:XMLBeanFactory
1.BeanFactory:定义了spring IoC容器的最基本形式,由其他的容器类如ApplicationContext、XMLBeanFactory实现该接口,管理IoC中的bean。/** * Ioc容器:BeanFactory,是一个接口,定义了基本的IoC容器规范,包含了一系列的获取容器中bean的方法 */public interface BeanFactory { /原创 2017-07-07 21:55:31 · 509 阅读 · 0 评论 -
spring技术内幕笔记:IoC容器初始化过程(1)- Resource定位
一、Resource资源定位spring内部将配置文件中定义的元素转换为BeanDefinition对象,那么,如何去寻找配置文件呢?1.DefaultListableBeanFactory使用DefaultListableBeanFactory时,首先定义一个Resource来定位容器使用的BeanDefinition,这时使用的是ClassPathResource,表名spring原创 2017-07-09 12:55:51 · 733 阅读 · 0 评论 -
IDEA搭建Spring项目
目前还没有在IDEA上搭建过Web项目,刚好想http://blog.csdn.net/u010632868/article/details/52348179重学Spring,借此机会来试一下使用IDEA开发Web项目在网上看了好几篇搭建Spring项目的教程,不知道是哪里没有配置好,Tomcat启动一顿报错,最后看到了一个视频,跟着视频里步骤搭建,终于成功了。视频地址:http:原创 2017-05-28 21:35:49 · 4270 阅读 · 1 评论