码迷,mamicode.com
首页 > 编程语言 > 详细

spring aop advice

时间:2016-05-04 18:59:00      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:

1.前置通知:

import java.lang.reflect.Method;

import org.springframework.aop.MethodBeforeAdvice;

public class HelloBeforeAdvice implements MethodBeforeAdvice{

    public void before(Method method, Object[] args, Object target) throws Throwable {
        System.out.println("do something before some method");
    }
}

如果出现 The hierarchy of the type HelloBeforeAdvice is inconsistent错误 , 是缺少相关的jar或者jdk环境不对。

2.后置通知

import java.lang.reflect.Method;

import org.springframework.aop.AfterReturningAdvice;

public class HelloAfterAdvice implements AfterReturningAdvice {

    public void afterReturning(Object result, Method method, Object[] args, Object target) throws Throwable {
        System.out.println("do something after the method");
    }

}

3. Test client

import org.springframework.aop.framework.ProxyFactory;

public class TestClient {

    public static void main(String[] args) {
        ProxyFactory proxyFactory = new ProxyFactory();//创建代理工厂
        proxyFactory.setTarget(new HelloImpl());
        proxyFactory.addAdvice(new HelloBeforeAdvice());
        proxyFactory.addAdvice(new HelloAfterAdvice());
        Hello helloProxy = (Hello) proxyFactory.getProxy();
        System.out.println(helloProxy.sayHello("zhangsan"));
    }
}

----------------------------
public class HelloImpl implements Hello {

    public String sayHello(String str) {
        System.out.println("hello>>>"+str);
        return "hello>>>"+str;
    }
}

4. 环绕通知

//aop联盟提供的接口
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

public class HelloAroundAdvice implements MethodInterceptor {

    public Object invoke(MethodInvocation invocation) throws Throwable {
        System.out.println("before method>>>");
        Object result = invocation.proceed();
        System.out.println("after method>>");
        return result;
    }
}

5. spring 配置文件方式

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
       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" xmlns:p="http://www.springframework.org/schema/p"
       xmlns:util="http://www.springframework.org/schema/util" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
       xmlns:cache="http://www.springframework.org/schema/cache"
       xsi:schemaLocation="
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd
    http://www.springframework.org/schema/jdbc
    http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
    http://www.springframework.org/schema/cache
    http://www.springframework.org/schema/cache/spring-cache.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util.xsd">
 <!-- 自动扫描ppms包 ,将带有注解的类 纳入spring容器管理 -->
    <context:component-scan base-package="com.cdv.ppms"></context:component-scan>

    <bean id="helloProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
        <property name="interfaces" value="com.cdv.ppms.Hello"/><!-- 需要代理的接口 -->
        <property name="target" ref="helloImpl"/><!-- 接口实现类 , 此处需要是ref 否则object is not an instance of declaring class-->
        <property name="interceptorNames"><!-- 拦截器 名称-->
            <list>
                <value>helloAroundAdvice</value>
            </list>
        </property>
    </bean>
   <bean id="helloImpl" class="com.cdv.ppms.HelloImpl"></bean>
</beans>
import org.springframework.stereotype.Component;

@Component
public class HelloImpl implements Hello {
//...
}

@Component
public class HelloAroundAdvice implements MethodInterceptor {
//....
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestXMLClient {

    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Hello    hello = (Hello) context.getBean("helloProxy");
        hello.sayHello("test xml");
    }
}

 

spring aop advice

标签:

原文地址:http://www.cnblogs.com/rocky-fang/p/5459346.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!