Spring的面向方面编程(Aop)
2008-11-10 22:18
645 查看
加入Spring Aop包<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
前置通知 (当方法调用时,此时方法还没有被调用)
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();
}
前置通知 (当方法调用时,此时方法还没有被调用)
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();
}
相关文章推荐
- Spring AOP: Spring之面向方面编程
- Spring_Aop 面向方面的编程
- java web 之路 spring 面向方面的编程(AOP)
- Spring AOP面向方面编程原理
- Spring使用 --- 基本概念(二):AOP,面向方面编程
- Spring 国际化支持 消息传递 以及 AOP 面向方面编程
- SSH学习之——Spring面向方面编程AOP
- Spring之面向方面编程(AOP)
- Spring AOP: Spring之面向方面编程
- Spring AOP面向方面编程原理:AOP概念
- Spring AOP: Spring之面向方面编程
- Spring AOP: Spring之面向方面编程
- Spring AOP: Spring之面向方面编程
- SPRING--Spring中IOC(反转控制) 和 AOP(面向方面编程)
- Spring AOP面向方面编程原理:AOP概念
- Spring之面向方面编程(AOP)
- Spring AOP面向方面编程原理
- 面向对象编程(OOP)、面向组件编程(COP)、面向方面编程(AOP)和面向服务编程(SOP)
- 【spring-boot】spring aop 面向切面编程初接触--切点表达式
- spring面向切面编程AOP(Aspect-orented programming)