spring 3企业开发 6
来源:互联网 发布:js利用for数组排序方法 编辑:程序博客网 时间:2024/05/23 19:36
AOP
术语
连接点:是具体事物,包括在哪个方法执行,执行方位是在哪里
切点:定位连接点。通过数据库查询的概念来理解切点和连接点的关系在合适不过了。连接点相当于数据库中的记录,切点相当于查询条件。切点和连接点不是一一对应的关系,一个切点可以匹配多个连接点。其实确切说,不能 称为查询连接点,因为连接点是方法执行前、后等包括方位信息的具体程序执行点,而切点只定位到某个方法上,所以如果希望定位到具体连接点上,还需求提供方位信息。
增强
是织入到目标类连接点上的一段程序代码。在spring 中,增强除用于描述一段程序代码外,还拥有另一个和连接点相关的信息,执行点的方位,结合执行点的方位信息和切点信息,可以找到连接点了。
引介:
引介是一种特殊的增强。他为类增加一些属性和方法。通过aop的引介,可以动态地为该业务添加接口的实现逻辑,让业务类成为这个接口的实现类。
切面,有切点和增强组成,
JDK动态代理
其中invocationHandler是一个接口,可以通过实现该接口定义横切逻辑,并通过反射,动态将横切逻辑和业务逻辑编织在一起。可以称invocationhander为织入器。
而proxy利用InvocationHander动态创建一个符合某一接口的实例。
public class TestForumService{
public static void main(String args[]){
ForumService target = new ForumServiceImpl();
PerformanceHander handler = new PerformanceHandler(target);
ForumServivce proxy = (ForcumService) Proxy.newProxyInstance(target.getclass().getclassloader(),target.getclass().getinterfaces(),handler);
}
}
public class TestBeforeAdivce{
public static void main(String args[]){
Waiter target = new NaiveWaiter();
BeforeAadive advice = new GreegingBeforeAdivice();
ProxyFactory pf = new ProxyFactory();
pf.setTarget(target);
pf.addadvice(advice);
Waiter proxy = (Waiter)pf.getProxy();
proxy.greetTo("john");
}
}
创建切面
假设我们希望有选择地织入到目标类某些特定方法中,就需要使用切点进行目标链接点的定位了。
增强提供了连接点方位信息,如织入到方法的前面、后面,而切点进一步描述织入到哪些类的哪些方法上。
Pointcut 由Classfilter 和 MethodMatcher构成。
切面可以在切点中找到对应物。
pointcutadvisor 主要有6个具体的实现类。
DefaultPointcutAdvisor ,常用的切面类型。
NameMatchMehodPointcutAdvisor 通过该类可以定义按方法名定义切点的切面。
RegexpMethodPointcutAdvisor 通过正则表达式进行定义切面
StaticMethodMatcherPointcutAdvisor ,静态方法匹配器切点定义的切面
AspectJExcepressionPointcutAdvisor 用于AspectJ切点表达式定义切点的切面
AspectJPointcutAdvisor 用于AspectJ语法定义切点的切面
此外,Advisor都实现了Ordered接口。spring 将根据Advisor定义的顺序决定织入切面的顺序。
实现类介绍
这些基于beanPostProcessor的自动代理创建器的实现类,将根据一些规则自动在容器实例化bean时为匹配的bean生成代理实例。
BeanNameAutoProxyCreator
根据bean的名称,来为代理bean
DefaultAdvisorAutoProxyCreator
我们知道切面AdvisorAutoProxyCreator是切点和增强的复合体。Advisor本身已经包含了足够的信息。横切逻辑(要织入什么)以及连接点(织入到哪里)
- spring 3企业开发 6
- spring 3 企业开发 5
- Spring 2企业应用开发
- spring 企业开发3.0 4
- Spring 3.x企业应用开发实战(6)----BeanFactory
- 企业开发框架NHibernate和Spring.Net
- .NET企业应用开发框架Spring.NET
- Spring 3.x 企业应用开发实战
- Spring 3.x企业应用开发实战
- Spring 3.x企业实用开发实战
- Spring 3.x企业应用开发实战(3)----资源抽象接口
- 企业开发框架NHibernate和Spring.Net简介
- 企业开发框架NHibernate和Spring.Net -1
- 企业开发框架NHibernate和Spring.Net -2
- 《轻量级J2EE企业应用实战--Struts+Spring+Hibernate整合开发》
- 精通Spring 2.x —— 企业应用开发详解
- Spring 3.x企业实用开发实战(1)
- Spring 3.x企业应用开发实战(4)----资源加载
- DataUml Design 介绍8-DataUML 1.2版本正式发布(支持SQLite数据库、NetUML开发框架)
- 乡愁 余光中
- Spring简介
- 数据结构——算法之(002)(字符串反转)
- 在Ubuntu 14.04 64位上使用libpcap进行抓包和解包
- spring 3企业开发 6
- Uboot如何添加命令
- DataUml Design 教程1-初识
- Hadoop中Partition解析
- 关于影响力章节的读后感:第二章
- CreateThread、_beginthreadex和AfxBeginThread 的区别
- MAVEN常用命令
- Android 侧滑菜单栏
- artDialog控件的嵌套使用