Spring学习(22)--- AOP之Advice应用(下)

本文内容纲要:Spring学习(22)--- AOP之Advice应用(下)

(六)Advice parameters(advice带参数的情况)

例子:

修改MyAspect(添加around_init方法):

package com.aop.schema;

import org.aspectj.lang.ProceedingJoinPoint;

/**

*

* 切面类

*

*/

public class MyAspect {

public void before(){

System.out.println("MyAspect.before");

}

public void afterreturning(){

System.out.println("MyAspect.afterreturning");

}

public void afterthrowing(){

System.out.println("MyAspect.afterthrowing");

}

public void after(){

System.out.println("MyAspect.after");

}

public void around(ProceedingJoinPoint pjp) {

try {

System.out.println("MyAspect.around_1");

Object obj=pjp.proceed();

System.out.println("MyAspect.around_2");

} catch (Throwable e) {

e.printStackTrace();

}

}

public void around_init(ProceedingJoinPoint pjp,String name,int age) {

System.out.println(name+" "+age);

try {

System.out.println("MyAspect.around_1");

Object obj=pjp.proceed();

System.out.println("MyAspect.around_2");

} catch (Throwable e) {

e.printStackTrace();

}

}

}

修改ApsectBiz类(添加init方法):

package com.aop.schema;

/**

*

* 业务类

*

*/

public class ApsectBiz {

public void biz(){

System.out.println("ApsectBiz.biz");

//throw new RuntimeException(); //故意抛出异常

}

public void init(String name,int age){

System.out.println("ApsectBiz.init : "+ name +" " +age);

}

}

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

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-4.1.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-4.1.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-4.1.xsd">

<bean id="myAspect" class="com.aop.schema.MyAspect"></bean>

<bean id="apsectBiz" class="com.aop.schema.ApsectBiz"></bean>

<aop:config>

<aop:aspect id="myAspectAOP" ref="myAspect">

<!-- 先注释掉,便于观察结果

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

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

<aop:after-returning method="afterreturning" pointcut-ref="myPointcut"/>

<aop:after-throwing method="afterthrowing" pointcut-ref="myPointcut"/>

<aop:after method="after" pointcut-ref="myPointcut"/>

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

-->

<aop:around method="around_init" pointcut="execution(* com.aop.schema.ApsectBiz.init(String,int)) and args(name,age)"/>

</aop:aspect>

</aop:config>

</beans>

单元测试:

package com.aop.schema;

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UnitTest {

@Test

public void test(){

ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-aop.xml");

ApsectBiz biz = (ApsectBiz)context.getBean("apsectBiz");

biz.init("Json",25);

}

}

结果:

七月 09, 2015 11:48:42 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh

INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@118e0f0f: startup date [Thu Jul 09 23:48:42 CST 2015]; root of context hierarchy

七月 09, 2015 11:48:42 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions

INFO: Loading XML bean definitions from class path resource [spring-aop.xml]

Json 25

MyAspect.around_1

ApsectBiz.init : Json 25

MyAspect.around_2

本文内容总结:Spring学习(22)--- AOP之Advice应用(下)

原文链接:https://www.cnblogs.com/JsonShare/p/4634535.html

以上是 Spring学习(22)--- AOP之Advice应用(下) 的全部内容, 来源链接: utcz.com/z/362897.html

回到顶部