aop简单注解实现例程
2012-08-07 00:27
363 查看
Aop一些的概念
a)
Cross Cutting Concern
是一种独立的服务,它会遍布在系统的整个处理流程中
b)
Aspect
对横切关注点的模块化,在spring aop中,切面可以使用普通的类或者在普通类中以@Aspect注解类实现
c)
Advice(通知)
对横切性关注点的具体实现,有before和after等类型
d)
Pointcut(切入点)
它定义了Advice应用到那些JoinPoint上,对Spring来说就是方法的调用
e)
Weave(织入)
将通知应用到Target Object上的过程
f)
Target Object
Advice被应用的对象,这个对象永远是一个被代理(proxied)的对象
g)JointPoint
Advice在应用程序上执行的点或者时机,Spring只支持方法的JointPoint,这个店也可以使属性修改,如:Aspectj可以支持
********************************************************************************
第一步:将横切关注点模块化,建立AspectJText类,并采用注解指定该类为Aspect,
第二步,启用AspectJ对Annotation的支持,并将目标类添加到IOC容器中,下面值spring中applicationContext.xml的配置文件
第三步,添加包含add字符方法的接口
第四步,定义接口的实现类
第五步,客户端的实现
public class Client {
public static void main(String[] args) {
BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
AddText at = (AddText)factory.getBean("ati");
at.add();
System.out.println("*******************");
at.add1();
System.out.println("*******************");
at.add("一个参数的方法");
System.out.println("*******************");
at.add("参数一","参数2");
}
}
**************************************************************
下面是运行的结果
在调用目标方法之前调用我
---add---
在调用目标方法之后调用我
*******************
在调用目标方法之前调用我
---add1---
在调用目标方法之后调用我
*******************
在调用目标方法之前调用我
---add---一个参数的方法
在调用目标方法之后调用我
*******************
在调用目标方法之前调用我
---add---参数一----参数2
在调用目标方法之后调用我
a)
Cross Cutting Concern
是一种独立的服务,它会遍布在系统的整个处理流程中
b)
Aspect
对横切关注点的模块化,在spring aop中,切面可以使用普通的类或者在普通类中以@Aspect注解类实现
c)
Advice(通知)
对横切性关注点的具体实现,有before和after等类型
d)
Pointcut(切入点)
它定义了Advice应用到那些JoinPoint上,对Spring来说就是方法的调用
e)
Weave(织入)
将通知应用到Target Object上的过程
f)
Target Object
Advice被应用的对象,这个对象永远是一个被代理(proxied)的对象
g)JointPoint
Advice在应用程序上执行的点或者时机,Spring只支持方法的JointPoint,这个店也可以使属性修改,如:Aspectj可以支持
********************************************************************************
第一步:将横切关注点模块化,建立AspectJText类,并采用注解指定该类为Aspect,
@Aspect public class AspectJText { /** * 定义Pointcut,Pointcut的名称为addAddMethod(), * 此方法没有返回值和参数 * 该方法就是一个标识,不进行调用 * * add*(..),代表执行以add开头的方法, * 括号里的表示任意个参数, * 当然可以不含参数 */ @Pointcut("execution(* add*(..))") private void addAddMethod(){ //注意执行的过程中,该句子不会打印出来,印证了该方法不会被调用 System.out.println("我不会被调用"); }; /** * 定义Advice,表示我们的Advice应用到哪些Pointcut订阅的Joinpoint上 */ @Before("addAddMethod()") private void befreExecuteTargetMethod() { System.out.println("在调用目标方法之前调用我"); } @After("addAddMethod()") private void afterExecuteTargetMethod(){ System.out.println("在调用目标方法之后调用我"); } }
第二步,启用AspectJ对Annotation的支持,并将目标类添加到IOC容器中,下面值spring中applicationContext.xml的配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <!-- 启用AspectJ对Annotation的支持 --> <aop:aspectj-autoproxy/> <bean id="ati" class="com.bjpowernode.spring.AddTextImpl"/> <bean id="ajt" class="com.bjpowernode.spring.AspectJText"/> </beans>
第三步,添加包含add字符方法的接口
/** * 测试所有带有add的方法 * @author Arthur * */ public interface AddText { public void add(); public void add1(); public void textadd(); public void add(String str); public void add(String str,String str1); }
第四步,定义接口的实现类
package com.bjpowernode.spring; public class AddTextImpl implements AddText { @Override public void add() { System.out.println("---add---"); } @Override public void add(String str) { System.out.println("---add---" + str); } @Override public void add(String str, String str1) { System.out.println("---add---" + str + "----" + str1); } @Override public void add1() { System.out.println("---add1---"); } @Override public void textadd() { System.out.println("---textadd---"); } }
第五步,客户端的实现
public class Client {
public static void main(String[] args) {
BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
AddText at = (AddText)factory.getBean("ati");
at.add();
System.out.println("*******************");
at.add1();
System.out.println("*******************");
at.add("一个参数的方法");
System.out.println("*******************");
at.add("参数一","参数2");
}
}
**************************************************************
下面是运行的结果
在调用目标方法之前调用我
---add---
在调用目标方法之后调用我
*******************
在调用目标方法之前调用我
---add1---
在调用目标方法之后调用我
*******************
在调用目标方法之前调用我
---add---一个参数的方法
在调用目标方法之后调用我
*******************
在调用目标方法之前调用我
---add---参数一----参数2
在调用目标方法之后调用我
相关文章推荐
- 从头认识Spring-3.8 简单的AOP日志实现(注解版)-扩展增加检查订单功能,以便记录并检测输入的参数
- 基于AOP的自定义注解简单实现
- spring 4.0 AOP (使用AspectJ的注解方式 的aop实现)简单实例
- AOP/CGLIB学习:实现简单的注解权限系统(Annotation+拦截器)
- 天易47----Springmvc注解方式实现aop配置简单示例
- spring 4.0 AOP (使用AspectJ的注解方式 的aop实现)简单实例
- 从头认识Spring-3.8 简单的AOP日志实现(注解版)-扩展添加检查订单功能,以便记录并检測输入的參数
- 从头认识Spring-3.7 简单的AOP日志实现(注解版)-增加检查订单功能
- SpringAOP+注解实现简单的日志管理
- spring 4.0 AOP (使用AspectJ的注解方式 的aop实现)简单实例
- 从头认识Spring-3.5 简单的AOP日志实现(注解版)-某方法之前的前后记录日志
- 从头认识Spring-3.6 简单的AOP日志实现(注解版)-需要记录方法的运行时间
- 注解方式简单的实现AOP
- 基于注解的spring AOP简单实现
- Spring Aop(二)——基于Aspectj注解的Aop简单实现
- 从头认识Spring-3.4 简单的AOP日志实现-扩展添加检查订单功能,以便记录并检測输入的參数
- 利用动态代理实现AOP的简单示例(JDK和cglib分别实现)
- Spring——使用Spring的注解方式实现面向切面技术AOP
- Java自定义注解 简单Hibernate的注解实现
- 简单实现JFinal注解配置Controller,Model