您的位置:首页 > 编程语言 > Java开发

Spring学习4-面向切面(AOP)之schema配置方式

2014-12-25 18:13 771 查看
一、通过Scheme配置实现AOP步骤([b]Spring
AOP环境的环境与上篇博文
[/b]


Spring接口方式相同)

步骤一、编写业务类:

public class AspectBusiness {

//切入点

public String delete(String obj) {

System.out.println("==========调用切入点:" + obj + "说:你敢删除我!===========\n");

return obj + ":瞄~";

}

public String add(String obj) {

System.out.println("================这个方法不能被切。。。============== \n");

return obj + ":瞄~ 嘿嘿!";

}

public String modify(String obj) {

System.out.println("=================这个也设置加入切吧====================\n");

return obj + ":瞄改瞄啊!";

}

}

步骤二、编写切面类:切面类中,包含了所有的通知

public class AspectAdvice {

//前置通知

public void doBefore(JoinPoint jp) {

System.out.println("===========进入before advice============ \n");

System.out.print("准备在" + jp.getTarget().getClass() + "对象上用");

System.out.print(jp.getSignature().getName() + "方法进行对 '");

System.out.print(jp.getArgs()[0] + "'进行删除!\n\n");

System.out.println("要进入切入点方法了 \n");

}

// 后置通知

// @param jp

// 连接点

// @param result

// 返回值

public void doAfter(JoinPoint jp, String result) {

System.out.println("==========进入after advice=========== \n");

System.out.println("切入点方法执行完了 \n");

System.out.print(jp.getArgs()[0] + "在");

System.out.print(jp.getTarget().getClass() + "对象上被");

System.out.print(jp.getSignature().getName() + "方法删除了");

System.out.print("只留下:" + result + "\n\n");

}

// 环绕通知

// @param pjp

// 连接点

public object doAround(ProceedingJoinPoint pjp) throws Throwable {

System.out.println("===========进入around环绕方法!=========== \n");

// 调用目标方法之前执行的动作

System.out.println("调用方法之前: 执行!\n");

// 调用方法的参数

Object[] args = pjp.getArgs();

// 调用的方法名

String method = pjp.getSignature().getName();

// 获取目标对象

Object target = pjp.getTarget();

// 执行完方法的返回值:调用proceed()方法,就会触发切入点方法执行

Object result = pjp.proceed();

System.out.println("输出:" + args[0] + ";" + method + ";" + target + ";" + result + "\n");

System.out.println("调用方法结束:之后执行!\n");

return result;

}

//异常通知

public void doThrow(JoinPoint jp, Throwable e) {

System.out.println("删除出错啦");

}

}

步骤四、配置文件的编写:

<?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:p="http://www.springframework.org/schema/p"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:aop="http://www.springframework.org/schema/aop"

xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
default->

<!-- ==============================利用spring 利用aspectj来配置AOP================================ -->

<!-- 声明一个业务类 -->

<bean id="aspectBusiness" class="aop.schema.AspectBusiness" />

<!-- 声明通知类 -->

<bean id="aspectAdvice" class="aop.schema.advice.AspectAdvice" />

<aop:config>

<aop:aspect id="businessAspect" ref="aspectAdvice">

<!-- 配置指定切入的对象 -->

<aop:pointcut id="point_cut" expression="execution(* aop.schema.*.*(..))" />

<!-- 只匹配add方法作为切入点

<aop:pointcut id="except_add" expression="execution(* aop.schema.*.add(..))" />

-->

<!-- 前置通知 -->

<aop:before method="doBefore" pointcut-ref="point_cut" />

<!-- 后置通知 returning指定返回参数 -->

<aop:after-returning method="doAfter"

pointcut-ref="point_cut" returning="result" />

<aop:around method="doAround" pointcut-ref="point_cut"/>

<aop:after-throwing method="doThrow" pointcut-ref="point_cut" throwing="e"/>

</aop:aspect>

</aop:config>


</beans>

步骤五、测试类:

public class Debug {

public static void main(String[] args) {

ApplicationContext context = new ClassPathXmlApplicationContext("aop/schema_aop.xml");

AspectBusiness business = (AspectBusiness) context.getBean("aspectBusiness");

business.delete("猫");

}

}
http://blog.sina.com.cn/s/blog_7ffb8dd501014alz.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: