Spring的面向方面编程(Aop)

加入Spring Aop包

前置通知 (当方法调用时,此时方法还没有被调用)

import org.springframework.aop.MethodBeforeAdvice;

public void before(Method m,Object[] args,Object target);

环绕通知 (方法调用中途)

import org.aopalliance.intercept.MethodInterceptor;

public Object invoke(MethodInvocation invocation);

后置通知 (方法调用结束)

import org.springframework.aop.AfterReturningAdvice;

public void afterReturning(Object returnValue, Method 

                    method,Object[] args, Object target);

异常通知 (发生异常时候)

import org.springframework.aop.ThrowsAdvice;

public void afterThrowing(Method method, Object[] args,

                      Object target, Exception ex);

以上均为接口,要获得相应的功能支持就需要继承相应的接口,并实现相应的方法

这些是反射机制实现的,因此一般需要导入java.lang.reflect.Method;

下面演示两个例子:

前置通知

import java.lang.reflect.Method;

import org.springframework.aop.MethodBeforeAdvice;

public class LogManager implements MethodBeforeAdvice{

public void before(Method m,Object[] args,Object target)

{

System.out.println("before Log!!!");

}

}

异常通知

import java.lang.reflect.Method;

import org.springframework.aop.ThrowsAdvice;

public class MyThrowsAdvice implements ThrowsAdvice {

public void afterThrowing(Method method, Object[] args,

                      Object target, Exception ex) {

System.out.println("异常发生方法: " + method.getName());

}

}

/**创建一个测试类*/

public class AopDemo implements IAopDemo {//接口

public void doSomething() throws Exception

{

System.out.println("运行doSomething方法....");

//throw new Exception("unkown exception");

}

}

<!-- 前置通知在applicationContext中的配置 -->

<bean id="logAdvice" class="com.sxy.LogManager"></bean>

<!-- 异常捕获 -->

<bean id="myThrowsAdvice " class="com.sxy.MyThrowsAdvice"></bean>

<!-- 测试类对象 -->

<bean id="aopDemoTarget" class="com.lxt008.aop.AopDemo"></bean>

<!-- 增强前置通知,这样可以详细定义应用到方法 -->

<bean id="logAdvisor"

class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">

<constructor-arg>

<ref local="logAdvice" />

</constructor-arg>

<property name="mappedNames">

<list>

<value>doSomething</value>

</list>

</property>

</bean>

  <!--程序里使用aopDemo即可-->

<bean id="aopDemo" 

  <!--代理,功能:整合AopDemo类与通知-->

class="org.springframework.aop.framework.ProxyFactoryBean">

<property name="proxyInterfaces">

          <!-- 测试类继承的接口 -->

<value>com.lxt008.aop.IAopDemo</value>  

</property>

<property name="interceptorNames">

               <!--要应用的通知-->

<list>

<value>logAdvisor</value>

<value>myThrowsAdvice</value>

</list>

</property>

            <!--引用的类-->

<property name="target" ref="aopDemoTarget"></property>

</bean>

public static void main(String[] args) {

ApplicationContext ctx=new 

        ClassPathXmlApplicationContext("applicationContext.xml");

IAopDemo demo=(IAopDemo)ctx.getBean("aopDemo");

demo.doSomething();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值