- 浏览: 50411 次
- 性别:
- 来自: 南京
文章分类
最新评论
提示:
BeanPostProcessor
AopUtils
代理模式
spring中<aop:config/>,<tx:annotation-driver/>,<aop:aspectJ>等配置看似复杂,其实本质就是PointCut,BeanPostProcessor,AbstractAutoProxyCreator一些接口直接的解耦
查找的Advisor用到了模板方法设计模式和委托模式,创建代理类用到了代理模式
解析:
<tx:annotation-driven transaction-manager="transactionManager" /> - TxNamespaceHandler
spring中的该配置实际上就是注册了几个beanDefinition
InfrastructureAdvisorAutoProxyCreator - BeanPostProcess
AnnotationTransactionAttributeSource - 可以延伸为Pointcut
TransactionInterceptor - MethodInterceptor
TransactionAttributeSourceAdvisor - Advisor(其中持有TransactionAttributeSourcePointcut)
在bean实例化后,开始调用BeanPostProcess.postProcessAfterInitialization
1.首先查询所有的advisor
2.根据advisor中的pointcut校验bean是否符合该advisor,并返回methodInterceptor
3.将methodInterceptor通过适配器模式封装到advisors(这里的methodInterceptor是广义的概念,有可能是advice等)
4.将advisors封装到advisedSupport,委托ProxyFactory(AdvisedSupport)生成代理
ProxyFactory委托AopProxyFactory(InvocationHandler)生成代理
<aop:aspectj-autoproxy /> - AopNamespaceHandler
该配置就是定义了一个AnnotationAwareAspectJAutoProxyCreator(BeanPostProcessor)的bean
<aop:config/> - AopNamespaceHandler
spring中的该配置实际上就是注册了几个beanDefinition
AspectJAwareAdvisorAutoProxyCreator -BeanPostProcessor
AspectJExpressionPointcut - Pointcut
DefaultBeanFactoryPointcutAdvisor - Advisor
讨论:
这里注册的几个BeanPostProcessor都继承了AbastractAutoProxyCreator。AbastractAutoProxyCreator采用了模板方法设计模式,在模板方法中定义了生成代理的一系列步骤,由子类实现查找匹配的Advisor的过程
采用AopUtils查找合适的Advisor
PointCut接口设计:
BeanPostProcessor
AopUtils
代理模式
spring中<aop:config/>,<tx:annotation-driver/>,<aop:aspectJ>等配置看似复杂,其实本质就是PointCut,BeanPostProcessor,AbstractAutoProxyCreator一些接口直接的解耦
查找的Advisor用到了模板方法设计模式和委托模式,创建代理类用到了代理模式
解析:
<tx:annotation-driven transaction-manager="transactionManager" /> - TxNamespaceHandler
spring中的该配置实际上就是注册了几个beanDefinition
InfrastructureAdvisorAutoProxyCreator - BeanPostProcess
AnnotationTransactionAttributeSource - 可以延伸为Pointcut
TransactionInterceptor - MethodInterceptor
TransactionAttributeSourceAdvisor - Advisor(其中持有TransactionAttributeSourcePointcut)
在bean实例化后,开始调用BeanPostProcess.postProcessAfterInitialization
1.首先查询所有的advisor
2.根据advisor中的pointcut校验bean是否符合该advisor,并返回methodInterceptor
3.将methodInterceptor通过适配器模式封装到advisors(这里的methodInterceptor是广义的概念,有可能是advice等)
4.将advisors封装到advisedSupport,委托ProxyFactory(AdvisedSupport)生成代理
ProxyFactory委托AopProxyFactory(InvocationHandler)生成代理
<aop:aspectj-autoproxy /> - AopNamespaceHandler
该配置就是定义了一个AnnotationAwareAspectJAutoProxyCreator(BeanPostProcessor)的bean
<aop:config/> - AopNamespaceHandler
spring中的该配置实际上就是注册了几个beanDefinition
AspectJAwareAdvisorAutoProxyCreator -BeanPostProcessor
AspectJExpressionPointcut - Pointcut
DefaultBeanFactoryPointcutAdvisor - Advisor
讨论:
这里注册的几个BeanPostProcessor都继承了AbastractAutoProxyCreator。AbastractAutoProxyCreator采用了模板方法设计模式,在模板方法中定义了生成代理的一系列步骤,由子类实现查找匹配的Advisor的过程
采用AopUtils查找合适的Advisor
public static List<Advisor> findAdvisorsThatCanApply(List<Advisor> candidateAdvisors, Class<?> clazz){ ... }
PointCut接口设计:
public interface Pointcut { /** * Return the ClassFilter for this pointcut. * @return the ClassFilter (never {@code null}) */ ClassFilter getClassFilter(); /** * Return the MethodMatcher for this pointcut. * @return the MethodMatcher (never {@code null}) */ MethodMatcher getMethodMatcher(); /** * Canonical Pointcut instance that always matches. */ Pointcut TRUE = TruePointcut.INSTANCE; }
发表评论
-
spring疑难解惑-循环依赖的解决
2020-06-17 23:27 541AbstractAutowireCapableBeanFact ... -
spring容器
2019-07-14 08:47 305private final ServletContainer ... -
spring容器
2019-07-13 23:35 0spring容器与springmvc容器 73 ... -
spring源码学习系列2.6-spring ioc原理-codes
2019-03-05 22:56 487web.xml <listener> < ... -
spring源码学习系列3.4-spring mvc原理-codes
2019-01-21 22:46 296本篇章从核心类角度解读springmvc的原理 web.xm ... -
spring源码学习系列4.2-spring aop原理-codes
2018-12-04 22:29 561jdk: Proxy InvocationHandler ... -
spring源码学习系列4.1-spring实现对ibatis的事务管理
2018-09-17 15:44 578事务由spring管理,可以理解为由spring管理数据库连接 ... -
spring源码学习系列4-3种常用的自动代理创建器
2018-09-02 15:48 5703种自动代理器是 AnnotationAwareAspectJ ... -
spring源码学习系列2.5-ApplicationContext初始化-设计模式
2018-05-08 15:17 519ApplicationContext容器的初始化可以通过模板方 ... -
spring源码学习系列3.3-DispatcherServlet初始化-设计模式
2018-05-07 11:12 622springmvc的核心是DispatcherServlet ... -
封装spring-security
2018-01-23 19:33 518github地址: https://github.com/ne ... -
eclipse导入spring源码
2018-05-12 07:20 980spring在git上的项目时gradle管理jar包的,所以 ... -
spring源码学习系列3.2.3-异常页面拦截机制
2017-07-29 19:07 768前序:本文的意义在于了解 tomcat处理异常 请求访问 ... -
spring源码学习系列3.2.2-How to bind String to Date
2017-07-17 12:40 598springmvc开发中,经常需将界面日期数据(String) ... -
spring源码学习系列3.2.1-command对象的绑定
2017-05-28 12:00 981在<spring源码学习系列3.2-handlerAda ... -
spring源码学习系列3.2-handlerAdapter执行
2017-05-28 12:01 409DispatcherServlet#doDispatch中调用 ... -
spring源码学习系列3.1-handlerMapping初始化
2017-05-28 11:56 701SimpleUrlHandlerMapping的继承体系 or ... -
spring源码学习系列2.4-finishRefresh会做什么
2017-05-06 16:36 578spring容器初始化完成后,调用finishRresh 该 ... -
spring源码学习系列3-springmvc原理
2017-05-28 11:56 456问题: springmvc是如何控 ... -
spring源码学习系列2-容器初始化入口-refresh
2017-04-23 21:33 477context=XmlWebApplicationContex ...
相关推荐
2. **面向切面编程(Aspect-Oriented Programming,AOP)**:Spring提供了基于代理的AOP实现,允许开发者定义横切关注点,如日志、事务管理等。在源码中,`Advisor`和`Advice`接口定义了切面和通知,而`...
通过源码分析,可以学习Spring如何管理Bean,如何实现依赖注入,以及如何利用AOP进行事务管理。 4. **MyBatis框架** MyBatis是一个轻量级的持久层框架,简化了SQL操作。在Java PMS中,MyBatis可能用于数据库的CRUD...
总结,JavaPMS 1.2 Beta的源码分析涵盖了Java编程语言、设计模式、系统架构、数据库设计、安全性以及测试等多个方面,对IT计算机专业的学生和开发者来说,是深入了解Java后台开发的宝贵资源。通过阅读和学习源码,...
熟悉Spring的核心概念、AOP(面向切面编程)和Spring Boot能帮助深入分析代码。 4. **MyBatis或JPA**:数据访问层可能使用MyBatis或者Java Persistence API(JPA)与数据库交互。理解SQL映射文件或Entity类,以及...
Spring 1.2源代码是Java开发者深入了解Spring框架工作原理的重要资源。这个版本的Spring框架在2004年发布,标志着Spring框架发展的早期阶段,它包含了许多核心特性,为现代企业级Java应用奠定了基础。在这个源代码...
标题中的“Swing+Spring-3.1.1+Mybatis-3.1.1+C3p0-0.9.1.2+Sqlite 实现Swing版网络爬虫”是一个集成开发项目,它利用了一系列Java技术来构建一个基于Swing的网络爬虫应用程序。这个项目的核心组件包括: 1. **...
通过运行和分析这些示例,你可以快速上手Spring-WS,了解如何创建服务端点、客户端代理,以及如何处理各种SOAP操作。同时,例子还可能展示如何与其他Spring组件(如Spring Boot、Spring MVC等)集成,实现完整的Web...
通过对“javapms-1.2-beta”的源代码进行分析和学习,学生可以深入理解Java编程语言、面向对象设计原则以及软件工程的最佳实践。同时,这也是一次绝佳的机会去探索和掌握现代Java开发中的关键技术和工具,为未来的...
### jsp源码OA办公自动化管理系统(Struts1.2+Hibernate3.0+Spring2+DWR)130224 #### 技术栈介绍 本项目是一款基于多种主流Java技术构建的办公自动化系统(OA系统)。该系统采用了JSP作为前端展示层的技术,后端则...
### jsp源码OA办公自动化管理系统(Struts1.2+Hibernate3.0+Spring2+DWR)知识点解析 #### 一、项目概述 该OA办公自动化管理系统是基于JSP技术栈开发的一个完整项目,主要涵盖了Struts1.2、Hibernate3.0、Spring2...
这是一个基于Java技术栈的OA(Office Automation)办公自动化管理系统...通过学习和分析这个源码,开发者可以深入理解Java Web开发中的MVC模式、ORM机制、依赖注入以及异步通信等关键概念,对于提升专业技能大有裨益。
OA办公自动化管理系统是一款基于Java技术栈的Web应用,利用了Struts1.2、Hibernate3.0、Spring2和DWR等开源框架,为企事业单位提供了一种高效、便捷的在线办公解决方案。这个项目源码适合Java开发人员进行学习、实践...
它们的源码深入研究可以帮助开发者理解Web应用的构建原理,提高代码质量,并为自定义扩展或开发新框架提供基础。通过阅读源码,你可以学习到如何设计模块化的系统,如何优雅地处理并发问题,以及如何优化数据库访问...
在描述中提到了一个博客链接,虽然具体内容没有给出,但通常博主会分享关于Spring框架的使用、配置、源码分析或问题解决等内容。在实际开发中,理解和使用Spring框架的源码可以帮助开发者更深入地了解其工作原理,...
【压缩包子文件的文件名称列表】"tcc-transaction-master-1.2.x"表明这是一个开源项目的源码仓库,版本为1.2.x,包含了整个TCC事务实现的代码结构。我们可以从中学习到如何定义服务、编写TCC的尝试、确认和取消操作...
本篇文章将深入探讨Xfire的学习及其源码分析,帮助新手快速入门Web服务的开发。 首先,我们要理解Web服务的基本概念。Web服务通过使用XML(可扩展标记语言)来描述数据,并利用WSDL(Web服务描述语言)来定义服务...
通过查看项目的源码,初学者可以深入学习SSH整合的具体实现,包括各层之间的通信方式、异常处理机制、以及如何通过配置文件进行集成等。 在实际学习过程中,建议按照以下步骤逐步探索MYBOOK项目: 1. 理解项目结构...
根据提供的文件信息,我们可以归纳出一系列与“java源码java+sql企业固定资产管理系统”相关的知识点。下面将对这些知识点进行详细解析。 ### 一、Java编程语言基础 #### 1.1 Java概述 - **定义**:Java是一种广泛...
Spring2是企业级应用开发的重要框架,它不仅包含了IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)等核心特性,还提供了大量的扩展支持,如事务管理、数据访问集成等,极...
本系列源码解析的方式将从 MyBatis 的源码入手,深入分析 MyBatis 的设计思路和实现机制。 2. 容器的加载与初始化 2.1 config 文件解析 XMLConfigBuilder.parseConfiguration 方法是 MyBatis 中的核心方法之一,...