- 浏览: 2828419 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (1173)
- 名言警句 (5)
- 心情随笔 (50)
- 数据库 (57)
- Java基础 (241)
- J2EE框架 (91)
- 数据结构 (12)
- 程序设计 (21)
- WEB技术 (128)
- 网络日志 (12)
- IT资讯 (247)
- linux (64)
- solaris (2)
- 其它 (143)
- WebService (4)
- 日语学习 (2)
- 机器人 (5)
- Android (5)
- cgywin (3)
- Game (1)
- DWR (1)
- spring (8)
- canvas (1)
- Guava (3)
- Modbus (5)
- 测试 (6)
- mongodb (9)
- Quartz (2)
- Cron (1)
- windows (2)
- 持续集成 (1)
- bootstrap (3)
- 结对编程 (1)
- nodejs (1)
- Netty (1)
- 安全 (3)
- webstorm (2)
- sparkline (1)
- Job (1)
- git (3)
- Maven (3)
- knockout (5)
- jquery (1)
- bower (1)
- docker (1)
- confluence (4)
- wiki (1)
- GoogleMap (1)
- jekyll (10)
- ruby (2)
- npm (3)
- browserify (1)
- gulp (3)
- openwrt (1)
- discuz (3)
- 输入法 (1)
- JPA (1)
- eclipse (2)
- IntelliJ (1)
- css (1)
- 虚拟机 (1)
- 操作系统 (1)
- azkaban (2)
- scrum (1)
最新评论
-
pangxiea_:
你好, 想请问一下 Linux下 这么使用rxtxcomm 在 ...
使用Java进行串口通信 -
abababudei:
请教一下,这个您是怎么解决的:/dev/ttyS2enteri ...
Java应用程序的MODBUS通讯 -
xuniverse:
hannibal005 写道楼主,我问下 request.se ...
用javascript与java进行RSA加密与解密 -
atxkm:
找了一下午,终于找到了
gulp 拷贝文件时如何移除文件目录结构 -
kalogen:
gtczr 写道非常感谢,经过我自己的修改,已经完美实现。发出 ...
用javascript与java进行RSA加密与解密
1.1 AOP 的概念
简单地说, AOP 就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任,例如事务处理 (Transactions) ,日志管理( logging, tracing, profiling and monitoring 记录跟踪 优化 校准),权限控制( Authentication ),同步 (Synchronization), 封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
实质上, AOP 只是 OOP 的一种补充或某种改进,它转换了编程的范式和视角,关注了一直以来被 OOP 忽 略或者说未能解决好的角落,使开发人员可以更好地将本不该彼此纠缠在一起的责任(如银行业务和事务处理)分离开来。通过面向切面的编程,可以将程序的责任 分开,对象与切面互不干扰。面向切面的模块并非显式地为对象所调用,而是通过或注入或截取的方式,去获得被封装的对象内部方法间的消息,然后做出相应地处 理。也许面向切面的模式破坏了对象的封装,却正其如此,方才能降低模块与模块之间的耦合度。同样地,通过对 “ 方面 ” 的封装,将这些通用的功能从不同的类中分离出来,使不同的模块都能共享同样的 “ 方面 ” ,这也极大地减少了重复代码。
Spring 的 AOP 核心技术还是动态代理, Spring 的代理实现方式有两种,默认使用 CGLIB ,也可以选择使用 JDK 的代理,这一切对开发人员来说是透明的,可以不关心这些。
1.2 AOP 的基本术语
以 Spring 为例:
1. 面( Aspect ): 一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是 J2EE 应用中一个关于横切关注点的很好的例子。 在 Spring AOP 中,切面可以使用通用类(基于模式的风格) 或者在普通类中以 @Aspect 注解( @AspectJ 风格)来实现。
2. 连接点( Joinpoint ): 在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。 在 Spring AOP 中,一个连接点 总是 代表一个方法的执行。 通过声明一个 org.aspectj.lang.JoinPoint 类型的参数可以使通知( Advice )的主体部分获得连接点信息。
3. 知( Advice ): 在切面的某个特定的连接点( Joinpoint )上执行的动作。通知有各种类型,其中包括 “around” 、 “before” 和 “after” 等通知。 通知的类型将在后面部分进行讨论。许多 AOP 框架,包括 Spring ,都是以拦截器做通知模型,并维护一个以连接点为中心的拦截器链。
4. 切入点( Pointcut ) : 匹配连接点( Joinpoint )的断言。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行(例如,当执行某个特定名称的方法时)。 切入点表达式如何和连接点匹配是 AOP 的核心: Spring 缺省使用 AspectJ 切入点语法。
5. 引入( Introduction ) : (也被称为内部类型声明( inter-type declaration ))。声明额外的方法或者某个类型的字段。 Spring 允许引入新的接口(以及一个对应的实现)到任何被代理的对象。 例如,你可以使用一个引入来使 bean 实现 IsModified 接口,以便简化缓存机制。
6. 目标对象( Target Object ) : 被一个或者多个切面( aspect )所通知( advise )的对象。也有人把它叫做 被通知(advised) 对象。 既然 Spring AOP 是通过运行时代理实现的,这个对象永远是一个 被代理(proxied) 对象。
7.AOP 代理( AOP Proxy ) : AOP 框架创建的对象,用来实现切面契约( aspect contract )(包括通知方法执行等功能)。 在 Spring 中, AOP 代理可以是 JDK 动态代理或者 CGLIB 代理。 注意: Spring 2.0 最新引入的基于模式( schema-based )风格和 @AspectJ 注解风格的切面声明,对于使用这些风格的用户来说,代理的创建是透明的。
8. 织入( Weaving ) : 把切面( aspect )连接到其它的应用程序类型或者对象上,并创建一个被通知( advised )的对象。 这些可以在编译时(例如使用 AspectJ 编译器),类加载时和运行时完成。 Spring 和其他纯 Java AOP 框架一样,在运行时完成织入。
通知的类型:
1. 前置通知( Before advice ) : 在某连接点( join point )之前执行的通知,但这个通知不能阻止连接点前的执行(除非它抛出一个异常)。
2. 返回后通知( After returning advice ) : 在某连接点( join point )正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回。
3. 抛出异常后通知( After throwing advice ) : 在方法抛出异常退出时执行的通知。
4. 后通知( After (finally) advice ) : 当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。
5. 环绕通知( Around Advice ) : 包围一个连接点( join point )的通知,如方法调用。这是最强大的一种通知类型。 环绕通知可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行。
发表评论
-
spring mvc @controller unit test
2013-11-20 14:14 38451. spring mvc controller imple ... -
Tomcat 生产服务器性能优化
2013-07-23 06:45 977试想以下这个情景:你已经开发好了一个程序,这个程序的排版很不 ... -
Loading Multiple Spring Application Contexts with their own ClassLoader
2013-07-11 20:45 1036package de.incompleteco.spring ... -
ActiveMQ JMS的测试
2011-04-06 18:15 3885有二种方式可以测试。 1. 透过testng, 在测试类中完 ... -
Maven系列2--pom.xml 配置详解
2011-01-06 18:00 3144<project xmlns="http ... -
fisheye2.3.6 安装笔记
2010-09-16 20:25 2203一. 准备工作 1. 下载fisheye ... -
服务器端编程的十大性能问题
2010-09-15 12:01 1211今年5 月底,瑞士计算 ... -
JMX in spring 配置
2010-09-07 12:00 3018JConsole中的连接:简单的localhost:1099 ... -
Ehcache 2.0:后写式缓存和JTA支持
2010-05-22 11:13 1815开源缓存框架Ehcache 最 ... -
Twitter系统运维经验
2010-04-12 22:24 1515最近看到的另外一个 ... -
采用OSGi框架开发项目的十个问题
2010-03-21 18:08 1427近期,InfoQ针对Java模块 ... -
IBM和Eclipse加大对OSGi的支持
2010-03-21 18:05 1231为Java提供模块性的OSGi,正在受到IBM和Eclipse ... -
Castor功能与应用参考
2010-03-12 12:48 35751. 项目简介Castor是一个开源的Java项目 ... -
hibernate之 DetachedCriteria实现多表查询
2009-07-25 17:13 13060DetachedCriteria detachedCriter ... -
web.xml 中的listener、 filter、servlet 加载顺序及其详解
2009-07-02 16:14 4081在项目中总会遇到一些 ... -
maven笔记
2009-06-22 22:14 1492mvn package : 项目打包 mvn help:ef ... -
利用maven构建多模块项目
2009-06-17 14:28 53301. 先单独构建各模块为一个独立的项目。 jar项目: m ... -
Maven基础
2009-06-17 12:58 1823下载Maven安装文件。 定义环境变量M2_HOME到pat ... -
安装M2eclipse步骤
2009-06-15 14:45 37781.下载下列所需文件 eclipse3.4.2 ... -
用 Maven 做项目管理
2009-06-08 18:01 2600在Java 世界中我们很多的开发人员选择用Ant 来构 ...
相关推荐
spring AOP 理论知识点总结.wpsspring AOP 理论知识点总结.wpsspring AOP 理论知识点总结.wps
spring aop spring aop spring aop spring aop spring aop spring aop spring aop spring aop spring aop
spring aop jar 包
在Spring AOP中关注点(concern)和横切关注点(cross-cutting concern)有什么不同? AOP有哪些可用的实现? Spring中有哪些不同的通知类型(advice types)? Spring AOP 代理是什么? 引介(Introduction)是什么? 连接...
spring-aop-1.1.1.jar spring-aop-1.2.6.jar spring-aop-1.2.9.jar spring-aop-2.0.2.jar spring-aop-2.0.6.jar spring-aop-2.0.7.jar spring-aop-2.0.8.jar spring-aop-2.0.jar spring-aop-2.5.1.jar spring-aop-...
基于注解实现SpringAop基于注解实现SpringAop基于注解实现SpringAop
一、适合人群 1、具备一定Java编程基础,初级开发者 2、对springboot,mybatis,mysql有基本认识 3、对spring aop认识模糊的,不清楚如何实现Java 自定义注解的 ...4、spring boot,mybatis,druid,spring aop的使用
spring aop的demo spring aop的demo
springaop依赖的jar包,spring版本2.5.6,如果需要,可以下载使用,欢迎各位评论指出不足
Spring框架的关键组件之一是面向方面编程(AOP)框架。 面向方面的编程需要将程序逻辑分解成不同的部分。 此教程将通过简单实用的方法来学习Spring框架提供的AOP/面向方面编程。
Spring aop Spring aop
Spring AOP 几个不同使用方法的完整例子,使用Junit4c测试, 在我的博客上有不同配置组合的说明,可以参考
死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理(csdn)————程序
spring aop
springAOP详解
开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE...
Spring AOP简单demo 入门级的 advice
springAop与spring定时器
springAOP所需jar包 springAOP所需jar包 springAOP所需jar包 springAOP所需jar包 springAOP所需jar包
AOP流程源码分析-SpringAOP中定义的类图AOP流程源码分析-SpringAOP中定义的类图AOP流程源码分析-SpringAOP中定义的类图AOP流程源码分析-SpringAOP中定义的类图AOP流程源码分析-SpringAOP中定义的类图AOP流程源码分析...