`
gao_20022002
  • 浏览: 164889 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring整理记录之AOP

阅读更多

Spring AOP使用纯Java实现。它不需要专门的编译过程。Spring AOP不需要控制类装载器层次,因此它适用于J2EE web容器或应用服务器。

Spring目前仅支持使用方法调用作为连接点(join point)(在Spring bean上通知方法的执行)。虽然可以在不影响到Spring AOP核心API的情况下加入对成员变量拦截器支持,但Spring并没有实现成员变量拦截器。

Spring并不是要提供最完整的AOP实现(尽管Spring AOP有这个能力),相反的,它其实侧重于提供一种AOP实现和Spring IoC容器之间的整合,用于帮助解决在企业级开发中的常见问题。

基于代理(proxy-based)的框架如Spring AOP或者是成熟的框架如AspectJ都是很有价值的,他们之间应该是互补而不是竞争的关系。Spring 2.0可以无缝的整合Spring AOP,IoC和AspectJ,使得所有的AOP应用完全融入基于Spring的应用体系。这样的集成不会影响Spring AOP API或者AOP Alliance API;Spring AOP保持了向下兼容性。

Spring缺省使用J2SE 动态代理(dynamic proxies)来作为AOP的代理。 这样任何接口(或者接口集)都可以被代理。
Spring也可以使用CGLIB代理。

J2EE开发者有两个事务管理的选择: 全局 或 本地 事务。全局事务由应用服务器管理,使用JTA。局部事务是和资源相关的,比如一个和JDBC连接关联的事务。
全局事务可以用于多个事务性的资源(典型例子是关系数据库和消息队列)。
使用局部事务,应用服务器不需要参与事务管理,并且不能帮助确保跨越多个资源(需要指出的是多数应用使用单一事务性的资源)的事务的正确性。


不同的事务管理器是如何创建的,以及它们如何被连接到相应的需要被同步到事务的资源上(例如,DataSourceTransactionManager 对应到JDBC DataSource, HibernateTransactionManager 对应到Hibernate的 SessionFactory 等)。
可是,剩下的问题是,直接或间接地使用一种持久化API(JDBC、Hibernate、JDO等)的应用代码,
如何确保通过相关的 PlatformTransactionManager 来恰当地获取并操作资源,来满足事务同步,这些操作包括:创建、复用、清理 和 触发(可能没有)。

在理解Spring的声明式事务管理方面最重要的概念是:Spring的事务管理是通过AOP代理实现的。 其中的事务通知由元数据(目前基于XML或注解)驱动。 代理对象与事务元数据结合产生了一个AOP代理,它使用一个PlatformTransactionManager 实现品配合TransactionInterceptor,在方法调用前后实施事务。

PROPAGATION_NESTED 是一个完全不同的设置。它使用了一个单独的物理事务, 这个事务拥有多个可以回滚的保存点。这样部分回滚允许内部事务在它的作用域内触发一个回滚, 并且外部事务能够不受影响的继续。 这通常是对应于JDBC的保存点,所以只会在 JDBC 资源事务管理上起效 。

Spring提供两种方式的编程式事务管理:
使用 TransactionTemplate
直接使用一个 PlatformTransactionManager 实现。

TransactionTemplate 采用与Spring中别的 模板 同样的方法, 如 JdbcTemplate 。
它使用回调机制,将应用代码从样板式的资源获取和释放代码中解放出来, 这样写出的代码是目的驱动的,把精力集中在开发者想要做的事情上。

Spring提供的DAO(数据访问对象)支持目的是便于以一致的方式使用不同的数据访问技术, 如JDBC,Hibernate或者JDO等。它不仅可以让你方便地在这些持久化技术间切换, 而且让你在编码的时候不用考虑处理各种技术中特定的异常。

Spring提供了一种方便的方法,把特定于某种技术的异常,如SQLException, 转化为自己的异常,这种异常属于以DataAccessException 为根的异常层次。这些异常封装了原始异常对象,这样就不会有丢失任何错误信息的风险。

JdbcTemplate是core包的核心类。它替我们完成了资源的创建以及释放工作,从而简化了我们对JDBC的使用。 它还可以帮助我们避免一些常见的错误,比如忘记关闭数据库连接。 JdbcTemplate将完成JDBC核心处理流程,比如SQL语句的创建、执行,而把SQL语句的生成以及查询结果的提取工作留给我们的应用代码。 它可以完成SQL查询、更新以及调用存储过程,可以对ResultSet进行遍历并加以提取。 它还可以捕获JDBC异常并将其转换成org.springframework.dao包中定义的,通用的,信息更丰富的异常。

Spring通过DataSource对象来完成这个工作。 DataSource是JDBC规范的一部分,它被视为一个通用的数据库连接工厂。通过使用DataSource, Container或Framework可以将连接池以及事务管理的细节从应用代码中分离出来。

分享到:
评论

相关推荐

    个人整理的关于AOP概念

    在企业级应用中,事务管理、日志记录、安全控制等往往是横切于各个业务功能的共同需求,AOP通过模块化这些横切关注点,使得主要业务逻辑更加清晰,减少了代码的重复。 #### 二、AOP核心概念解析 AOP的核心概念主要...

    Spring学习篇AOP知识整理编程开发技术共4页.pdf

    在实际开发中,我们可以利用Spring AOP来处理日志记录、事务管理、性能监控等跨切面关注点。例如,对于事务管理,我们可以通过定义一个切面,包含开始事务的前置通知、提交或回滚事务的后置通知,然后通过切入点...

    Aop记录执行时间.pdf

    Spring AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架的重要特性之一,它能够让我们在不修改原有代码的情况下,给程序中的一些功能增加额外的行为,例如日志、事务管理等。通过AOP,开发者可以将横...

    Spring基础学习资料,很全面,很经典,手工整理,适合刚学习spring的同学

    Spring的核心特性之一是控制反转(Inversion of Control, IOC),它将对象的创建和管理交给Spring容器。依赖注入(Dependency Injection, DI)则是实现IOC的一种方式,允许你声明对象之间的依赖关系,而不是在代码...

    spring.net 资料整理

    AOP 在 Spring.NET 中主要通过代理模式实现,可以用于事务管理、日志记录、性能度量等场景。 总之,Spring.NET 是一个强大的 .NET 开发框架,通过 IoC 和 AOP 提供了灵活的应用程序结构和模块化设计,使开发者能够...

    spring 笔记整理

    - **AOP支持**:Spring的AOP特性用于实现如权限拦截、日志记录等功能。 - **辅助类库**:如JdbcTemplate、HibernateTemplate,简化了数据库操作。 - **框架集成**:Spring能很好地与Hibernate、JPA、Struts等框架...

    Spring面试专题及答案整理.pdf

    4. **AOP(面向切面编程)**:通过代理模式实现了切面编程,帮助开发者实现诸如日志记录、安全控制等功能。 5. **工具**:提供了各种工具类,如用于文件上传的CommonsMultipartResolver。 6. **消息**:支持多种...

    spring5学习代码整理文件

    2. **面向切面编程(AOP)**:Spring5支持AOP,允许开发者定义横切关注点,如日志记录、事务管理等,将这些关注点与业务逻辑分离。`@Aspect`、`@Before`、`@After`、`@Around`、`@Pointcut`等注解就是实现AOP的关键...

    spring版本整理.rar

    首先,Spring框架的核心特性包括依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)。依赖注入允许开发者解耦组件,使得代码更加灵活和可测试。而面向切面编程则提供了在不...

    传智播客Spring2.5.6学习笔记最新整理

    按照“传智播客Spring2.5.6学习笔记最新整理”的指引,我们需从官方下载页面http://www.springsource.org/download下载Spring框架,随后解压缩并定位到关键的JAR文件。这些JAR文件包括: - `dist\spring.jar`:核心...

    spring mvc需要用的jar完整整理

    12. **aspectjweaver.jar**(如果使用了AspectJ):AspectJ 是一个强大的 AOP 实现,Spring 可以与之集成以实现更复杂的切面逻辑。 以上是 Spring MVC 开发中常见的 jar 包及其功能概述。在实际项目中,根据具体...

    Spring自整理的笔记.7z

    依赖注入是 Spring 框架的核心特性之一,它使得对象之间的依赖关系不再硬编码,而是通过外部容器来管理。Spring 使用接口注入,构造器注入和 setter 注入三种方式实现 DI,帮助开发者减少代码的耦合度,提高可测试性...

    Spring知识整理

    ### Spring知识整理 #### 一、Spring框架简介与环境搭建 **Spring** 是一款轻量级的 Java 开发框架,其核心设计目标是为了使企业应用更容易配置和部署,同时简化了开发过程。Spring 可以集成几乎所有的 J2EE 流行...

    spring开发手册

    Spring作为Java领域最流行的轻量级框架之一,它以其依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)理念,极大地简化了企业级应用的开发工作。 本手册以CHM(Compiled ...

    Spring2&3速查手册HandBood系列(By FengGe整理)

    AOP是Spring提供的另一个重要特性,它允许我们在不修改业务代码的情况下,添加额外的功能,如日志记录、事务管理等。Spring AOP通过切面(Aspect)来实现,切面是跨越多个对象的横切关注点的封装。 三、Bean的配置 ...

    Spring Secruity 项目中用到的包整理

    8. `org.springframework.aop-3.0.5.RELEASE.jar`: 提供了面向切面编程(AOP)的支持,Spring Security使用AOP来实现声明式安全,例如通过注解或XML配置定义访问控制规则。 9. `spring-security-core-3.0.5.RELEASE...

    Spring-Kapcb:Spring学习

    记录自己关于Spring的学习笔记还有Demo ,笔记均在Demo注释部分,后续会整理成MarkDown格式的文件发布在博客上。 如果觉得对您有帮助,您的Start就是对我最大的认同。 欢迎互相学习交流,如果项目中有问题的部分可以...

    Spring4资料

    - **面向切面编程实践**:教授如何使用Spring AOP进行日志记录、性能监控等。 - **Web开发实战**:通过Spring MVC构建实际的Web应用。 #### 源码分析 - **Spring核心容器解析**:分析BeanFactory和...

    java-用Java动态代理实现AOP.pdf

    AOP(面向切面编程)是一种编程范式,旨在将横切关注点(cross-cutting concerns)从业务逻辑中分离出来,通过预定义的点(称为连接点)将额外的行为(如日志记录、安全检查等)应用到系统中,从而实现模块化。AOP与...

Global site tag (gtag.js) - Google Analytics