`
darren_nizna
  • 浏览: 72610 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

使用MethodInterceptor实现AOP

 
阅读更多

1. 先写出业务对象接口及实现业务对象。

 

public interface Interface {
    public void hello();
}

   这里写俩个实现。

public class InterfaceImpl implements Interface {

    /** 
     * @see com.alipay.aop.BusinessInterface#hello()
     */
    @Override
    public void hello() {
        System.out.println("AOP TEST!!");
    }
}
 

 

public class InterfaceImplTest implements Interface {

    /** 
     * @see aop.Interface#hello()
     */
    @Override
    public void hello() {
        System.out.println("helo world!!");
    }

}

 

 

2. 实现自己的代理,创建自己的interceptor

 

public class MyInterceptor implements MethodInterceptor {

    /** 
     * @see org.aopalliance.intercept.MethodInterceptor#invoke(org.aopalliance.intercept.MethodInvocation)
     */
    @Override
    public Object invoke(MethodInvocation methodInvocation) throws Throwable {
        String info = methodInvocation.getMethod().getDeclaringClass()+ "." + 
        methodInvocation.getMethod().getName() + "()";
        
        System.out.println(info);
        
        try{
            Object result = methodInvocation.proceed();
            return result;
        }
        finally{
            System.out.println(info);
        }
    }
}

 

3. 配置文件

 <?xml version="1.0" encoding="GBK"?>

<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:sofa="http://img.alipay.net/dtd/schema/service"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:webflow="http://www.springframework.org/schema/webflow-config"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
         http://img.alipay.net/dtd/schema/service http://img.alipay.net/dtd/schema/service/sofa-service.xsd
         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
         http://www.springframework.org/schema/webflow-config http://www.springframework.org/schema/webflow-config/spring-webflow-config-2.0.xsd"
	default-autowire="byName">
	
	<bean id="beanTarget" class="aop.InterfaceImpl"/>
	
	<bean id="hello" class="aop.InterfaceImplTest" />
	
	<bean id="myInterceptor" class="aop.MyInterceptor"/>
	
	<bean id="bean" class="org.springframework.aop.framework.ProxyFactoryBean">
		<property name="proxyInterfaces">
			<value>aop.Interface</value>
		</property>
		
		<property name="interceptorNames">
			<list>
				<value>myInterceptor</value>
				<value>beanTarget</value>
			</list>
		</property>
	</bean>
	
	<bean id="testBean" class="org.springframework.aop.framework.ProxyFactoryBean">
		<property name="proxyInterfaces">
			<value>aop.Interface</value>
		</property>
		
		<property name="interceptorNames">
			<list>
				<value>myInterceptor</value>
				<value>hello</value>
			</list>
		</property>
	</bean>
</beans>
 

 

 

4. 测试代码

 

 

public class Main {

    /**
     * 
     * @param args
     */
    public static void main(String[] args) {
        ClassPathResource resource = new ClassPathResource("spring.xml");
        XmlBeanFactory beanFactory = new XmlBeanFactory(resource);
        Interface bean = (Interface)beanFactory.getBean("bean");
        bean.hello();
        
        Interface testBean = (Interface)beanFactory.getBean("testBean");
        testBean.hello();
    }
}
3
7
分享到:
评论
3 楼 nhy338 2012-08-28  
mark,留着以后看
2 楼 爪哇夜未眠 2011-11-18  
这个是spring里面的方法拦截
1 楼 sunnylocus 2011-10-13  
做下标记,明天有空仔细研究下方法拦截,感觉这是好东西!

相关推荐

    使用JDK中的Proxy技术实现AOP功能与使用CGLIB实现AOP功能

    本篇将深入探讨如何使用JDK的动态代理和CGLIB库来实现Spring中的AOP功能。 首先,我们来看JDK中的Proxy技术。JDK Proxy是Java提供的一种动态代理机制,它允许我们在运行时创建一个实现了特定接口的新类。这个新类...

    Xml文件配置实现AOP通知

    环绕通知稍微复杂一些,因为它需要实现`org.springframework.aop.MethodInterceptor`接口,并覆写`invoke()`方法。以下是一个简单的环绕通知示例: ```java public class AroundAdvice implements ...

    Spring使用AOP的三个jar包

    最后,`aopalliance-1.0.0.jar`是AOP联盟提供的一个接口库,它定义了一些通用的AOP接口,比如`org.aopalliance.intercept.MethodInterceptor`和`org.aopalliance.intercept.MethodInvocation`,使得不同的AOP框架...

    JavaEE spring自动实现AOP代理

    - CGLIB通过字节码技术生成代理类,使用`net.sf.cglib.proxy.Enhancer`类,设置回调函数`Callback`(如MethodInterceptor),并在调用目标方法时插入切面逻辑。 3. **AOP代理的配置**: - 在Spring配置文件中,...

    JavaEE CGLIB字节码增强方式实现AOP编程

    JavaEE CGLIB字节码增强技术是实现面向切面编程(AOP)的一种常见方法。在JavaEE应用中,AOP允许开发者定义“切面”,这些切面封装了跨越多个对象的横切关注点,如日志、事务管理等。CGLIB(Code Generation Library...

    spring,hibernate整合实现事务管理(MethodInterceptor)

    标题中的“spring,hibernate整合实现事务管理(MethodInterceptor)”是指在Java开发中,使用Spring框架与Hibernate ORM框架进行集成,以实现应用的事务管理。Spring以其强大的依赖注入(DI)和面向切面编程(AOP)...

    org/aopalliance/intercept/MethodInterceptor 类 fro Spring3.0

    nested exception is java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor 就是少了这个包

    AOP需要的Jar包

    当Spring AOP无法使用Java标准的动态代理(例如,目标类没有接口)时,会使用CGLIB来创建目标对象的子类,从而实现动态代理。CGLIB生成的子类会包含拦截器逻辑,使得切面能够在运行时被应用。 了解这些Jar包的作用...

    spring aop实现

    本文将深入探讨Spring AOP的实现,包括MethodBeforeAdvice、AfterReturningAdvice以及MethodInterceptor等关键概念。 一、AOP基础知识 AOP的核心思想是横切关注点,即那些与业务逻辑不直接相关的,但需要在多个...

    aopalliance-1.0.jar及aopalliance源码

    例如,可以查看`MethodInterceptor`接口如何被具体的AOP框架实现,如Spring AOP或AspectJ,以及它们如何利用`MethodInvocation`来控制方法的调用流程。 **AOP Alliance与其他AOP框架的集成** AOP Alliance的存在...

    spring源代码分析:aop的实现

    在具体实现中,Spring使用了MethodInterceptor接口,它定义了一个intercept()方法,这个方法会在目标方法调用前后执行。Spring的AOP代理(无论是JDK还是CGLIB)都会实现这个接口,并在intercept()方法中插入通知逻辑...

    aop的四种实现方式

    在AOP中,Javassist可以通过在运行时动态修改类的方法来实现切面。它提供了一种简单的方式来改变类的结构或行为,而无需重新编译源代码。例如,我们可以使用Javassist添加拦截器来记录方法调用的时间。 ```java ...

    Spring  AOP实现方法大全

    你需要实现`org.springframework.aop.Advisor`接口的子接口`org.aopalliance.intercept.MethodInterceptor`,并提供一个`invoke()`方法。 4. **Throw Advice**:在方法抛出异常后调用,但不包括在方法内部捕获并...

    aopalliance

    使用AOPAlliance,开发者可以在Spring 2.0中定义自己的拦截器或通知,实现业务逻辑的解耦和模块化。例如,通过实现`MethodInterceptor`接口,我们可以创建自定义的拦截逻辑,如日志记录、性能监控等,而这些都可以在...

    aopalliance-1.0

    前者包含了源代码,便于开发者理解和学习其内部实现,而后者则是编译后的类库,可以直接在项目中使用。 在aopalliance-1.0.jar中,最重要的接口有两个:org.aopalliance.intercept.MethodInterceptor 和 org.aop...

    个人用java动态代理模拟实现spring aop

    在本主题中,我们将探讨如何使用Java动态代理来模拟实现Spring AOP的功能。 首先,我们需要了解Java中的两种动态代理机制:JDK动态代理和CGLIB动态代理。JDK动态代理基于接口实现,适用于目标对象实现了接口的情况...

    aopalliance.jar

    其中最核心的接口包括MethodInterceptor和Aspect,它们是实现AOP的关键组件。MethodInterceptor接口定义了一个方法拦截器,允许我们在方法调用前后插入自定义的行为。Aspect则代表了切面,它封装了一组相关的方法,...

    aopalliance最新完整jar包

    总的来说,aopalliance是一个在Java AOP实现之间提供互操作性的库,它定义了一套通用的接口,使得开发者可以轻松地将不同AOP框架的拦截器和通知结合在一起使用。收集最新完整的aopalliance.jar包,对于保持项目的...

    springAOP所依赖的jar包

    这个库定义了如`org.aopalliance.intercept.MethodInterceptor`和`org.aopalliance.intercept.Joinpoint`等核心接口,使得不同AOP框架之间的互操作性成为可能。 2. **aspectjweaver-1.7.4.jar** AspectJ Weaver是...

    spring aop依赖包 aspectjweaver-1.8.7 aspectjrt-1.8.7 aopalliance-1.0

    通过这个组件,开发者可以使用AspectJ的注解或者编译时编织(CTW)和加载时编织(LTW)来实现AOP的功能。 其次,`aspectjrt-1.8.7.jar`是AspectJ运行时库,包含了AspectJ运行时需要的所有类和接口。这个库提供了...

Global site tag (gtag.js) - Google Analytics