
全部展开
Spring提供了三种开发aop应用程序的方法: 第一: 在Spring 1.2中,aop是通过ProxyFactoryBean(即动态代理)实现的. Aspect必须继承MethodBeforeAdvice,MethodAfterAdvice等! bean id =“ man” class =“ Man”>
<属性名称=“名称”>
<值类型=“ java.lang.String”>张三值>
property>
bean> <!-Aspect->继承自MethodBeforeAdvice
class =“ org.springframework.aop.framework.ProxyFactoryBean”> <属性名称=“ target”> property> <列表> list> property> bean>二: Spring 2.0 AOP应用程序需要更改FBI类,并且不需要实现某些接口公共类FBI { (JoinPoint点)之前的公共无效{ Man man =(Man)point.getTarget(); System.err.println(“ FBI发现” + man.getName()+“进行中” + point.getSignature(). getName()+“ Activity. ”); } }请注意此类中(JoinPoint)之前的方法,该方法的名称可以是任意的,并且可以带一个JoinPoint类 类型参数也可以像没有参数的before()一样编写,但是此JoinPoint对象带来了所有必要的条件 有与此方法调用相关的信息spring aop 几种方式,包括方法参数,目标对象等,因此,如果要一般地记录它,则 带上它. 下面是测试类的代码,与上一个几乎没有什么不同,但是现在它可以直接访问该人了 这个豆. xmlns: xsi =“; xmlns: aop =“; xsi: schemaLocation =“ ;> <属性名称=“名称”> <值类型=“ java.lang.String”>张三值> property> bean> expression =“执行(*手动*(..))” /> aop: 方面> aop: 配置> beans> 1. aop名称空间添加在配置文件的开头spring aop 几种方式,如代码中的粗斜体所示. 2. 使用aop: config标记来定义AOP,而不是使用ProxyFactoryBean来定义新的 豆. 一个是人类物体,另一个是 FBI特工. 而aop: config定义所有AOP设置信息. aop: 切入点 定义切入点,id给出切入点的唯一名称,表达式定义切入点的表达式 ,那么这个定义到底是什么意思?这意味着代表一个场景,即执行 Man对象的所有方法都是这种情况,这就是表达式执行(* Man. *(..))的含义, 伙计. *(..)代表Man类的所有方法. 接下来,我们需要定义一个方面,该方面由aop: 方面定义, 其ref属性指定与此方面相对应的bean定义的ID,该ID指向fbi的bean类;子标签 aop: “之前”指示何时发生名为manPointcut的切入点(案例)(使用pointcut-ref属性 指定,pointcut-ref =“ manPointcut”),然后调用之前命名的方法,该方法位于方面中 在引用的Bean中 ,这里是fbi(即ref =“ fbi”). 实际上,Spring在这里执行后,它将自动 将此代码转换为基础的bean定义(诸如ProxyFactoryBean之类的机制仍将在后台使用) 然后将直接获取Bean的操作委托给代理类,这就是为什么上面提到的测试类只需要 访问原始man bean的原因,将执行相应的拦截类. 从Spring 2.0看到这里 定义AOP bean类仍然相对复杂,并且XML文件和概念已添加很多,需要读者 慢慢学习和理解. 第三,使用批注(@AspectJ)实现用于切入点解析和匹配的AOP库. 为了在Spring配置中使用@AspectJ方面,必须首先基于@AspectJ启用Spring 方面配置支持. 自动代理基于通知是否来自这些方面. 自动代理是 这意味着Spring将确定bean是否使用了一个或多个方面通知,并相应地自动生成相应的代理 拦截其方法调用并确认通知正在按预期进行. 通过在Spring配置文件中引入以下元素,为@AspectJ启用Spring支持: 您还可以通过在应用程序上下文中添加以下定义来启用@AspectJ支持: class =“ org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyC reator“ /> 您需要在应用程序的类路径中引入两个AspectJ库: Aspectjweaver.jar和 aspectjrt.jar. 添加Spring开发功能时,我们在此处使用的MyEclipse已自动添加了这些功能. 类库文件,无需手动配置. 定义方面: 启用@AspectJ支持后,Spring将自动识别并使用在应用程序上下文中使用@Aspect方面定义的任何bean(带有@Aspect批注) 在Spring AOP中配置. 定义切入点: 现在通过在@AspectJ注释的AOP中签名切入点 通过通用方法定义提供,并且切入点表达式使用@Pointcut批注表示(作为切入 由入口点签名的方法必须返回void). 该代码可以参考清单10.12. 好的,参考这些文档,我们需要介绍基于注释的这个新的AOP项目,这个项目 名称为Spring2_0AOPAspectJ. 如上一节所示添加Spring核心和AOP类库之后,您可以 已开发. 然后,与使用AOP标签的10.4.1 AOP实现相比,该项目的代码只有两个地方. 方想改变. 首先,我们需要修改FBI类的源代码,并添加注释以实现切割平面和切割点的定义,如下所示: 导入org.aspectj.lang.JoinPoint; 导入org.aspectj.lang.annotation.Aspect; 导入org.aspectj.lang.annotation.Before; / ** * FBI代理记录您的所有动作. * @author BeanSoft * / @Aspect FBI公共类{ @Before(“执行(*手动*(..))”) (JoinPoint点)之前的公共无效{ Man man =(Man)point.getTarget(); System.err.println(“ FBI发现” + man.getName()+“进行中” + point.getSignature(). getName()+“ Activity. ”); } } 列出带有Aspect注释的10.12 FBI类 此类中@Before之后的“执行(* Man. *(..))”是与切入点相对应的切入点表达式,其含义 含义与上一节中的相同. 这仍然意味着Man类的所有方法的执行都会触发该方法的执行. 使用此符号,将大大简化XML配置文件,其内容如下: <? xml version =“ 1.0” encoding =“ UTF-8”?> xmlns: xsi =“; xmlns: aop =“; xmlns: tx =“; xsi: schemaLocation =“ ;> <属性名称=“名称”> <值类型=“ java.lang.String”>张三值> property> bean> beans> 1.添加了粗斜体 2. 删除了 您可以看到,使用此方法使AOP的开发和配置非常容易. 这是JDK 1.5的介绍. 从中受益. 当然,缺点是必须重新编译源代码才能修改配置. 注意: 您不能在这里删除 自动AOP代理对象将没有机会创建和工作. 在这种情况下,无法谈论man对象. 结束了. 围绕咨询@Aspect的AOP应用程序的四项开发 FBI公共类{ @Around(“执行(*手动*(..))”) (ProceedingJoinPoint点)之前的公共对象抛出Throwable { Man man =(Man)point.getTarget(); System.err.println(“ FBI发现” + man.getName()+“即将推出” + point.getSignature(). getName()+“ Activity. ”); //禁止张三泡泡MM if(point.getSignature(). getName(). equals(“ mm”)){ System.err.println(“ FBI将阻止” + man.getName()+“气泡MM”. ) }否则,如果(point.getSignature(). getName(). 等于(“ sayHelp”)){ System.err.println(“ FBI将欺骗“ + man.getName()+” 的朋友 告诉他们很好. “); 返回“我是” + man.getName()+“我现在很好. ” }否则{Object object = point.proceed(); 返回null; } }张三不仅不是MM,当他寻求帮助时,FBI还可以直接截取并修改它,并请求 消息“救救我,我是张三!”更改为“我是张三,我现在很好. ”通过欺骗的方式,张三 朋友永远不知道发生了什么. / ** *具有三种行为的Person对象: QQ和MM,帮助和用户名属性. * @author BeanSoft * / 公共阶层的人{ 私有字符串名称; 公共字符串getName(){ 返回名称; } public void setName(字符串名称){ this.name = name; } 公共无效qq(){ System.out.println(“我在聊天QQ”); } 公共空隙mm(){ System.out.println(“我在MM中”); } 公共字符串sayHelp(){ 返回“救救我,我就是” + getName(); } }



System.err.println(“找到FBI” + man.getName()+“已完成” +
point.getSignature(). getName()+“活动”. );
返回对象;
}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-153683-1.html
还送好多东西
因为直接守住小日本的出口要道
很多核心技术还是差很远的