自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

李阿昀的博客

求田问舍,怕应羞见,刘郎才气

  • 博客(22)
  • 资源 (44)
  • 论坛 (3)
  • 收藏
  • 关注

原创 Spring注解驱动开发第35讲——声明式事务原理的源码分析

写在前面上一讲,我向大家简单介绍了一下注解版的声明式事务,相信大家已经会初步使用了。这一讲,咱们就从源码的角度分析一下声明式事务的原理,让大家对声明式事务的原理有一个更加深入的认识。声明式事务的原理其实,要想知道声明式事务的原理,只需要搞清楚@EnableTransactionManagement注解给容器中注册了什么组件,以及这些组件工作时候的功能是什么就行了,一旦把这个研究透了,那么声明式事务的原理我们就清楚了。你有没有发现,咱们之前研究AOP的原理时,是从@EnableAspectJAutoP

2020-12-28 18:56:09 585 1

原创 Spring注解驱动开发第34讲——你了解基于注解版的声明式事务吗?

不知不觉,时间已快过一个月了,而这个Spring注解驱动开发系列教程才写到第34讲,实在是说不过去,我向大家宣布一件事情,那就是:我是一个傻逼!我是一个傻逼!我是一个傻逼!我得承认这样一个事实,但无论如何抱怨,路还是要继续走下去,这可真是一件没有道理的事情。好吧!回到正文,在这一讲中,我来向大家讲解一下声明式事务,也就是看看Spring用注解是如何来简化对数据库事务的开发的。搭建声明式事务的环境是个人都知道,在对数据库进行增删改操作时,必然是要使用到事务的。因此,接下来,我们就来搭建好声明

2020-12-25 20:42:47 410 1

原创 Spring注解驱动开发第33讲——AOP原理总结

往期精选Spring注解驱动开发第25讲——你敢信?面试官竟然让我现场搭建一个AOP测试环境!Spring注解驱动开发第26讲——总有人让我给他讲讲@EnableAspectJAutoProxy注解Spring注解驱动开发第27讲——为AnnotationAwareAspectJAutoProxyCreator组件里面和后置处理器以及Aware接口有关的方法打上断点Spring注解驱动开发第28讲——为你呕心沥血分析创建和注册AnnotationAwareAspectJAutoProxyCreat

2020-12-25 14:04:57 479

原创 Spring注解驱动开发第32讲——拦截器链的执行过程

写在前面通过上一讲的研究,我们知道,在目标方法执行之前,Spring会把所有的增强器转换为拦截器,并最终形成一个拦截器链,然后根据这个拦截器链new出一个CglibMethodInvocation对象,接着会调用其proceed()方法。接下来,我们就来探究一下这个proceed()方法到底怎么执行的,你只要搞清楚了,那么你必然就能知道整个拦截器链的执行过程。更具体一点的说,你会知道目标方法的整个执行流程,即目标方法是怎么一执行,然后先来执行前置通知,接着再是目标方法,紧接着再是后置通知,最后再是返回通

2020-12-24 08:32:54 367

原创 Spring注解驱动开发第31讲——目标方法的拦截逻辑

写在前面在上一讲中,咱们分析了一下,AnnotationAwareAspectJAutoProxyCreator作为后置处理器,它的作用是什么。这一讲,咱们将关注点放在目标方法的执行流程上,好好研究一下目标方法是怎么一执行,然后先来执行前置通知,接着再是目标方法,紧接着再是后置通知,最后再是返回通知或者异常通知的,看一看是怎么有序的来执行这些流程的。目标方法的执行流程。。。...

2020-12-22 11:03:01 435 1

原创 Spring注解驱动开发第30讲——AnnotationAwareAspectJAutoProxyCreator作为后置处理器,你知道它都做了些什么吗?

写在前面前一讲中,我们一步一步分析到了AbstractAutoProxyCreator抽象类的postProcessBeforeInstantiation()方法中,其实,我们也知道现在调用的其实是AnnotationAwareAspectJAutoProxyCreator类的postProcessBeforeInstantiation()方法。那么,在这一讲中,我们就来看看AnnotationAwareAspectJAutoProxyCreator作为后置处理器,它的postProcessBefore

2020-12-20 08:43:18 591 8

原创 Spring注解驱动开发第29讲——注册完AnnotationAwareAspectJAutoProxyCreator后置处理器之后,就得完成BeanFactory的初始化工作了

写在前面经过前面的研究,我们发现,IOC容器在创建对象的时候,会注册这一些后置处理器,而在上一讲中,就已经把AnnotationAwareAspectJAutoProxyCreator这个后置处理器创建出来了,它呢,就是@EnableAspectJAutoProxy注解利用AspectJAutoProxyRegistrar给容器中创建出的一个bean的配置信息。当然了,在注册后置处理器的时候,这个bean肯定就已经提前创建出来了。而且,它呢,我们也都知道是一个后置处理器,只要这个后置处理器已经创建出来并

2020-12-18 11:42:14 468

原创 Spring注解驱动开发第28讲——为你呕心沥血分析创建和注册AnnotationAwareAspectJAutoProxyCreator的过程,这应该是全网分析的最详细的了!

写在前面在上一讲中,我们通过简单的人工分析,为AnnotationAwareAspectJAutoProxyCreator这个类中有关后置处理器以及自动装配BeanFactoryAware接口的那些方法都打上了一些断点,而且还为MainConfigOfAOP配置类中的两个方法打上了断点。接下来,我们就以debug模式来运行IOCTest_AOP测试类,仔细分析一下整个流程。创建和注册AnnotationAwareAspectJAutoProxyCreator的过程。。。...

2020-12-17 09:52:34 667 6

原创 Spring注解驱动开发第27讲——为AnnotationAwareAspectJAutoProxyCreator组件里面和后置处理器以及Aware接口有关的方法打上断点

写在前面在上一讲中,我们只是稍微分析了一下在配置类上添加@EnableAspectJAutoProxy注解之后,会向容器中注册了一个什么样的组件,因为咱们现在是要研究AOP的原理,而研究AOP的原理就得从@EnableAspectJAutoProxy注解入手研究。我讲到这里,大家一定会恍然大悟,其实,要想知道AOP的原理,只需要搞清楚@EnableAspectJAutoProxy注解给容器中注册了什么组件,这个组件什么时候工作以及这个组件工作时候的功能是什么就行了,一旦把这个研究透了,那么AOP的原理我

2020-12-17 08:19:47 760

原创 Spring注解驱动开发第26讲——总有人让我给他讲讲@EnableAspectJAutoProxy注解

@EnableAspectJAutoProxy注解在配置类上添加@EnableAspectJAutoProxy注解,便能够开启注解版的AOP功能。也就是说,如果要使注解版的AOP功能起作用的话,那么就得需要在配置类上添加@EnableAspectJAutoProxy注解。我们先来看下@EnableAspectJAutoProxy注解的源码,如下所示。从源码中可以看出,@EnableAspectJAutoProxy注解使用@Import注解给容器中引入了AspectJAutoProxyRegister组

2020-12-10 20:53:43 2596

原创 Spring注解驱动开发第25讲——你敢信?面试官竟然让我现场搭建一个AOP测试环境!

什么是AOP?AOP(Aspect Orient Programming),直译过来就是面向切面编程。AOP是一种编程思想,是面向对象编程(OOP)的一种补充。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面。比如,在《Spring实战(第4版)》中有如下一张图描述了AOP的大体模型。从这张图中,我们可以看出:所谓切面,其实就相当于应用对象间的横切点,我们可以将其单独抽象为单独的模块。总之一句话:AOP是指在程序的运行期间动态地将某段代码切入到指定方法、指定位置进行运行

2020-12-09 19:05:38 810 1

原创 Spring注解驱动开发第24讲——使用@Profile注解实现开发、测试和生产环境的配置和切换,看完这篇我彻底会了!!

写在前面在实际的企业开发环境中,往往都会将环境分为开发环境、测试环境和生产环境,并且每个环境基本上都是互相隔离的,也就是说,开发环境、测试环境和生产环境它们之间是互不相通的。在以前的开发过程中,如果开发人员完成相应的功能模块并通过单元测试后,那么他会通过手动修改配置文件的形式,将项目的配置修改成测试环境,发布到测试环境中进行测试。测试通过后,再将配置修改为生产环境,发布到生产环境中。这样手动修改配置的方式,不仅增加了开发和运维的工作量,而且总是手工修改各项配置文件会很容易出问题。那么,有没有什么方式可以解

2020-12-09 06:53:27 698

原创 Spring注解驱动开发第23讲——自定义组件中如何注入Spring底层的组件?看了这篇我才真正理解了原理!!

概述如果我们现在自定义的组件中需要用到Spring底层的一些组件,比如ApplicationContext(IOC容器)、底层的BeanFactory等等,那么该怎么办呢?先说说自定义的组件中能不能用Spring底层的一些组件吧?既然都这样说了,那么肯定是能够的。回到主题,自定义的组件要想使用Spring容器底层的一些组件,比如ApplicationContext(IOC容器)、底层的BeanFactory等等,那么只需要让自定义组件实现XxxAware接口即可。此时,Spring在创建对象的时候,会调

2020-12-04 18:56:44 641 3

原创 Spring注解驱动开发第22讲——如何实现方法、构造器位置的自动装配?我这样回答让面试官很满意!

写在前面在前面两讲中,我们介绍了如何使用注解来自动装配Spring组件。之前将的都是在类的字段上添加注解,那有没有什么方法可以实现方法、构造器位置上的自动装配呢?今天我们就一起来探讨下如何实现方法、构造器位置上的自动装配。再谈@Autowired注解在之前《Spring注解驱动开发第20讲——使用@Autowired、@Qualifier、@Primary这三大注解自动装配组件,你会了吗?》这一讲中,我简单介绍了下@Autowired注解的使用方法。下面,我们再来看下@Autowired注解的源码。

2020-12-03 15:34:07 502 3

原创 Spring注解驱动开发第21讲——你还不会使用@Resource注解和@Inject注解吗?那你就out了!!

写在前面在前一讲中,我介绍了如何使用@Autowired、@Qualifier以及@Primary这三个注解自动装配Spring组件。那除了这三个注解以外,还有没有其他的注解可以自动装配组件呢?那必须有啊!今天,我们就一起来说说@Resource注解和@Inject注解。简单介绍一下@Resource和@Inject这俩注解@Resource注解@Resource注解是Java规范里面的,也可以说它是JSR-250规范里面定义的一个注解。该注解默认按照名称进行装配,名称可以通过name属性进行指定,

2020-12-02 22:30:31 585

原创 Spring注解驱动开发第20讲——使用@Autowired、@Qualifier、@Primary这三大注解自动装配组件,你会了吗?

你知道@Autowired、@Qualifier、@Primary这些注解吗?@Autowired注解@Autowired注解可以对类成员变量、方法和构造函数进行标注,完成自动装配的工作。@Autowired注解可以放在类、接口以及方法上。在使用@Autowired注解之前,我们对一个bean配置属性时,是用如下XML配置文件的形式进行配置的。<property name="属性名" value=" 属性值"/>下面我们来看一下@Autowired注解的源码,如下所示。这儿对@A

2020-12-02 17:35:55 1109

原创 Spring注解驱动开发第19讲——使用@PropertySource加载配置文件,我只看这一篇!!

简单介绍一下@PropertySource和@PropertySources这俩注解@PropertySource注解概述@PropertySource注解是Spring 3.1开始引入的配置类注解。通过@PropertySource注解可以将properties配置文件中的key/value存储到Spring的Environment中,Environment接口提供了方法去读取配置文件中的值,参数是properties配置文件中定义的key值。当然了,也可以使用@Value注解用${}占位符为bean

2020-12-02 16:00:07 1043

原创 Spring注解驱动开发第18讲——如何使用@Value注解为bean的属性赋值呢?

写在前面在之前的文章中,我们探讨了如何向Spring的IOC容器中注册bean组件,并且还讲解了有关bean组件的生命周期的知识。今天,我们就来一起聊聊@Value注解的用法。@Value注解Spring中的@Value注解可以为bean中的属性赋值。我们先来看看@Value注解的源码,如下所示。从@Value注解的源码中我们可以看出,@Value注解可以标注在字段、方法、参数以及注解上,而且在程序运行期间生效。@Value注解的用法不通过配置文件注入属性的情况通过@Value注解将外部的值

2020-12-02 14:32:22 930 1

原创 Spring注解驱动开发第17讲——BeanPostProcessor在Spring底层是如何使用的?看完这篇我懂了!!

写在前面在上一讲中,我们详细的介绍了BeanPostProcessor的执行流程。那么,BeanPostProcessor在Spring底层是如何使用的呢?今天,我们就一起来探讨下Spring的源码,一探BeanPostProcessor在Spring底层的使用情况。BeanPostProcessor接口我们先来看下BeanPostProcessor接口的源码,如下所示。可以看到,在BeanPostProcessor接口中,提供了两个方法:postProcessBeforeInitializati

2020-12-02 11:08:08 906

原创 Spring注解驱动开发第16讲——面试官再问你BeanPostProcessor的执行流程,就把这篇文章甩给他!

写在前面在前面的文章中,我们讲述了BeanPostProcessor的postProcessBeforeInitialization()方法和postProcessAfterInitialization()方法在bean初始化的前后调用。而且我们可以自定义类来实现BeanPostProcessor接口,并在postProcessBeforeInitialization()方法和postProcessAfterInitialization()方法中编写我们自定义的逻辑。今天,我们来一起探讨下BeanPos

2020-12-01 17:47:15 1372

原创 Spring注解驱动开发第15讲——关于BeanPostProcessor后置处理器,你了解多少?

写在前面有些小伙伴问我,学习Spring是不是不用学习到这么细节的程度啊?感觉这些细节的部分在实际工作中使用不到啊,我到底需不需要学习到这么细节的程度呢?我的答案是:有必要学习到这么细节的程度,而且是有机会、有条件一定要学!吃透Spring的原理和源码!往往拉开人与人之间差距的就是这些细节的部分,当前只要是使用Java技术栈开发的Web项目,几乎都会使用Spring框架。而且目前各招聘网站上对于Java开发的要求几乎清一色的都是熟悉或者精通Spring,所以,你很有必要学习Spring的细节知识点。Be

2020-12-01 15:27:27 1087

原创 Spring注解驱动开发第14讲——你了解@PostConstruct注解和@PreDestroy注解吗?

写在前面在之前的文章中,我们介绍了如何使用@Bean注解指定初始化和销毁的方法,也介绍了使用InitializingBean和DisposableBean来处理bean的初始化和销毁。除此之外,在JDK中还提供了两个注解能够在bean创建完成并且属性赋值完成之后执行一些初始化工作和在容器销毁bean之前通知我们进行一些清理工作。今天,我们就一起来看看这两个注解的用法。@PostConstruct注解和@PreDestroy注解@PostConstruct注解@PostConstruct注解好多人以为

2020-12-01 14:21:10 635 1

Spring4.2.5+Hibernate4.3.11+Struts2.3.24整合开发

Spring4.2.5+Hibernate4.3.11+Struts2.3.24整合开发

2016-10-23

SpringMVC学习(一)——SpringMVC入门小程序

SpringMVC学习(一)——SpringMVC入门小程序

2017-05-15

为Spring集成的Hibernate配置二级缓存

为Spring集成的Hibernate配置二级缓存

2016-10-23

MyBatis的逆向工程——generatorSqlmapCustom

MyBatis的逆向工程——generatorSqlmapCustom

2017-05-13

SpringMVC学习(四)——Spring、MyBatis和SpringMVC的整合

SpringMVC学习(四)——Spring、MyBatis和SpringMVC的整合

2017-05-15

MyBatis框架的学习(二)——MyBatis架构与入门

MyBatis框架的学习(二)——MyBatis架构与入门

2017-05-11

一天搞定jQuery(二)——使用jQuery表格的隔行换色

一天搞定jQuery(二)——使用jQuery表格的隔行换色

2017-05-10

Spring的第一个案例

Spring的第一个案例

2016-10-16

用@Resource注解完成属性装配

用@Resource注解完成属性装配

2016-10-19

Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一

Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一

2016-10-22

使用流程设计器插件设计一个请假流程

使用流程设计器插件设计一个请假流程

2017-05-07

一天搞定jQuery(三)——使用jQuery完成复选框的全选和全不选

一天搞定jQuery(三)——使用jQuery完成复选框的全选和全不选

2017-05-11

编码剖析@Resource注解的实现原理

编码剖析@Resource注解的实现原理

2016-10-19

使用Spring的注解方式实现AOP的细节

使用Spring的注解方式实现AOP的细节

2016-10-21

一天搞定jQuery(一)——使用jQuery完成定时弹出广告

一天搞定jQuery(一)——使用jQuery完成定时弹出广告

2017-05-09

一天搞定jQuery(四)——使用jQuery完成省市二级联动的效果

一天搞定jQuery(四)——使用jQuery完成省市二级联动的效果

2017-05-11

MyBatis框架的学习(五)——一对一关联映射和一对多关联映射

MyBatis框架的学习(五)——一对一关联映射和一对多关联映射

2017-05-13

Spring管理的Bean的生命周期

Spring管理的Bean的生命周期

2016-10-16

Spring的三种实例化Bean的方式

Spring的三种实例化Bean的方式

2016-10-16

一天搞定jQuery(五)——使用jQuery完成下拉列表左右选择

一天搞定jQuery(五)——使用jQuery完成下拉列表左右选择

2017-07-06

教你一天玩转JavaScript(三)——使用JavaScript完成图片轮播的效果

教你一天玩转JavaScript(三)——使用JavaScript完成图片轮播的效果

2017-04-27

教你一天玩转JavaScript(四)——使用JavaScript实现定时弹出广告定时隐藏广告

教你一天玩转JavaScript(四)——使用JavaScript实现定时弹出广告定时隐藏广告

2017-05-02

Spring如何装配各种集合类型的属性

Spring如何装配各种集合类型的属性

2016-10-19

MyBatis框架的学习(七)——MyBatis逆向工程自动生成代码

MyBatis框架的学习(七)——MyBatis逆向工程自动生成代码

2017-05-13

Spring+JDBC组合开发

Spring+JDBC组合开发

2016-10-21

使用Spring配置文件实现AOP

使用Spring配置文件实现AOP

2016-10-21

教你一天玩转JavaScript(五)——使用JavaScript完成注册页面表单提示及校验

教你一天玩转JavaScript(五)——使用JavaScript完成注册页面表单提示及校验

2017-05-03

使用Spring的注解方式实现AOP入门

使用Spring的注解方式实现AOP入门

2016-10-20

教你一天玩转JavaScript(二)——完成对注册页面的数据的简单校验

教你一天玩转JavaScript(二)——完成对注册页面的数据的简单校验

2017-04-27

MyBatis的逆向工程测试

MyBatis的逆向工程——generatorSqlmapCustom

2017-05-13

SpringMVC学习(十二)——SpringMVC中的拦截器

SpringMVC学习(十二)——SpringMVC中的拦截器

2017-05-20

让Spring自动扫描和管理Bean

让Spring自动扫描和管理Bean

2016-10-19

教你一天玩转JavaScript(八)——使用JavaScript完成省市联动的效果

教你一天玩转JavaScript(八)——使用JavaScript完成省市联动的效果

2017-05-05

使用JDK中的Proxy技术实现AOP功能与使用CGLIB实现AOP功能

使用JDK中的Proxy技术实现AOP功能与使用CGLIB实现AOP功能

2016-10-19

MyBatis框架的学习(六)——MyBatis整合Spring

MyBatis框架的学习(六)——MyBatis整合Spring

2017-05-13

教你一天玩转JavaScript(六)——使用JavaScript完成后台数据展示表格的隔行换色

教你一天玩转JavaScript(六)——使用JavaScript完成后台数据展示表格的隔行换色

2017-05-04

Spring4.2.5+Hibernate4.3.11组合开发

Spring4.2.5+Hibernate4.3.11组合开发

2016-10-21

编码剖析Spring依赖注入的原理

编码剖析Spring依赖注入的原理

2016-10-17

教你一天玩转JavaScript(七)——使用JavaScript完成复选框的全选和全不选的效果

教你一天玩转JavaScript(七)——使用JavaScript完成复选框的全选和全不选的效果

2017-05-05

编码剖析Spring管理Bean的原理

编码剖析Spring管理Bean的原理

2016-10-16

李阿昀的留言板

发表于 2020-01-02 最后回复 2020-08-12

使用javamail这套API发送邮件失败

发表于 2016-09-23 最后回复 2016-09-23

为何我点击分类管理这一超链接时,下面的添加分类和查看分类就是显示不出来啊?

发表于 2016-09-17 最后回复 2016-09-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除