`
白色熊猫
  • 浏览: 17555 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

基于API 的spring aop

 
阅读更多
接口类
package cn.com.gan.spring.aop;

public interface IHello {
public void SayHello();
public void sayHelloAgain();
}

实现类
package cn.com.gan.spring.aop;

public class ImpHello implements IHello {

	@Override
	public void SayHello() {
    System.out.println("hello everybody!");
	}
	@Override
   public void sayHelloAgain(){
	   System.out.println("hello everybody again");
   }
}

advice类(aspect)
package cn.com.gan.spring.aop;

import java.lang.reflect.Method;

import org.springframework.aop.MethodBeforeAdvice;

public class LoggerBefore implements MethodBeforeAdvice {

	@Override
	public void before(Method method, Object[] args, Object target)
			throws Throwable {
		System.out.println("我在方法前插入日志");
	}

}
package cn.com.gan.spring.aop;

import java.lang.reflect.Method;
import org.springframework.aop.AfterReturningAdvice;

public class LoggerAfter implements AfterReturningAdvice {

	@Override
	public void afterReturning(Object returnValue, Method method,
			Object[] args, Object target) throws Throwable {
		System.out.println("打完招呼了!");
		
	}

}
package cn.com.gan.spring.aop;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

public class loggerAdvisor implements MethodInterceptor {

	@Override
	public Object invoke(MethodInvocation object) throws Throwable {
		Object o=null;
		try{
	    	System.out.println("记录日志");
	    }finally{
	    	o=object.proceed();
	    	System.out.println("记录完毕");
	    }
	    return o;
	}

}

操作类
package cn.com.gan.spring.aop;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringManager {
public static void main(String[] args){
	ApplicationContext ac=new ClassPathXmlApplicationContext("applicationAopContext.xml");
	IHello hello=(IHello)ac.getBean("proxyhello");
	hello.SayHello();
	hello.sayHelloAgain();
}
}


配置文件
<?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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd ">
	<bean id="hello" class="cn.com.gan.spring.aop.ImpHello"></bean>
	<bean id="loggera" class="cn.com.gan.spring.aop.LoggerAfter"></bean>
	<bean id="loggerb" class="cn.com.gan.spring.aop.LoggerBefore"></bean>
<bean id="logger" class="cn.com.gan.spring.aop.loggerAdvisor"></bean>
	<bean id="proxyhello"     class="org.springframework.aop.framework.ProxyFactoryBean">
		<property name="proxyInterfaces">
			<value>cn.com.gan.spring.aop.IHello</value>
		</property>
		<property name="target">
			<ref local="hello" />
		</property>
		<property name="interceptorNames">
			<list>
				<value>loggerb</value>
                                <value>loggera</value>
                                <value>logger</value>
			</list>
		</property>
	</bean>
</beans>


advice执行顺序 先执行loggerb中方法 ,然后执行logger 最后执行loggera。
这种方式的话在IHello接口中定义的所有方法都会被执行advice。如果限定那些方法要执行的话就要用到advisor(pointcut)。
分享到:
评论

相关推荐

    spring aop API示例

    在这个"spring aop API示例"中,我们将深入探讨如何利用Spring AOP的四种通知类型:Before、After、AfterThrowing和Around,以及它们在实际开发中的应用。 1. **Before通知**: 在方法执行前触发,可以用来执行...

    Spring AOP IOC源码笔记.pdf

    10. Spring AOP API: Spring AOP提供了Pointcut、Advisor、Aspect等概念,用于定义切入点、通知和切面。开发者可以通过自定义Aspect来实现特定的功能增强。 11. AOP的实现方式: Spring AOP支持基于代理和基于注解...

    springAOP所需jar包

    1. spring-aop.jar:这是Spring AOP的核心库,包含了AOP的API和实现。 2. spring-beans.jar:Spring的bean容器,负责管理和装配bean,AOP也是基于这个容器实现的。 3. spring-context.jar:提供了上下文支持,包括...

    springAOP配置动态代理实现

    2. **注解配置**:Spring 2.5引入了基于注解的AOP配置,可以在切面类上使用@Aspect注解,@Before、@After、@AfterReturning、@AfterThrowing和@Around定义通知,@Pointcut定义切点。例如: ```java @Aspect ...

    spring aop所需jar包

    - `spring-aop.jar`:Spring AOP的核心库,包含了AOP的API和实现。 - `spring-beans.jar`:Spring Bean的定义和管理,AOP与之紧密关联。 - `spring-core.jar`:Spring的基础库,提供核心工具类和IoC容器。 - `...

    第3章 Spring AOP.ppt

    理解和掌握AOP的概念及其在Spring框架中的实现方式,包括基于XML和注解的配置方式,以及JDK动态代理和CGLIB代理的原理和使用。通过学习,应能独立实现AOP相关的功能,提升代码的可扩展性和可维护性。

    Spring AOP需要jar包.rar

    1. spring-aop.jar:这是Spring AOP的核心库,包含了AOP相关的API和实现,如AspectJ的集成、通知(advises)的定义等。 2. spring-beans.jar:Spring的bean容器,负责管理和装配应用的bean,它是Spring框架的基础。...

    mybatis 拦截器 + spring aop切面 + spring事务+ 反射工具类

    在IT行业中,MyBatis、Spring AOP、Spring事务管理和反射工具类是常见的技术栈,它们在构建高效、灵活的企业级应用中起着至关重要的作用。以下是对这些知识点的详细阐述: 1. MyBatis拦截器(MyBatis Interceptor)...

    spring aop hessian 基础demo 部署即可运行

    Spring AOP和Hessian是两个在Java开发中广泛使用的技术,尤其在分布式系统和服务治理中。下面将详细解释这两个概念以及它们如何结合使用。 **Spring AOP(面向切面编程)** Spring AOP是Spring框架的一个重要组成...

    spring aop jar

    在Spring AOP中,切点通常通过使用切入点表达式来定义,这些表达式基于方法签名、注解或其他条件。 ### **织入(Weaving)** 织入是将切面应用到目标对象,创建一个代理对象的过程。Spring支持三种织入方式: - **...

    spring aop_aopalliance.jar_aspectjweaver.jar

    AOP Alliance是一个开放源代码项目,它的目标是为不同的AOP框架定义一个公共API,以便于不同框架之间的互操作性。这个库包含了一些核心的AOP接口,如`org.aopalliance.intercept.MethodInterceptor`和`org.aop...

    springboot spring aop 拦截器注解方式实现脱敏

    这两个依赖分别引入了AOP和Web支持,使得我们可以使用切面和创建RESTful API。 接下来是`application.properties`文件。虽然在这个特定的例子中,`application.properties`可能没有直接与拦截器相关,但我们可以在...

    Spring 基于基于XML配置方式实现AOP

    然而,随着Spring的发展,基于注解的AOP配置逐渐成为主流,因为它的简洁性和可读性更强。但这并不意味着XML配置方式失去了价值,尤其是在需要更细粒度控制或者与旧项目集成时,XML配置依然有着其独特的优势。 总的...

    Spring  AOP实现方法大全

    随着Spring的发展,除了使用XML配置,还引入了基于注解的AOP,使得配置更加简洁。例如,使用`@Before`、`@After`、`@Around`和`@Throws`注解可以直接在方法上声明Advice。 总结来说,Spring AOP通过四种类型的...

    spring aop xml实现

    XML配置是Spring AOP早期版本中主要的配置方式,虽然在Spring 4.x及以后版本中,基于注解的配置更加常见,但理解XML配置仍然是学习AOP的基础。 首先,我们需要了解AOP的基本概念: 1. 切面(Aspect):一个关注点的...

    基于Spring AOP 的声明式和编程式分布式锁,支持RedisTemplate、Redisson、Zookeeper

    总结来说,基于Spring AOP的声明式和编程式分布式锁,结合RedisTemplate、Redisson或Zookeeper,可以有效地解决分布式环境中的并发控制问题。这样的设计不仅简单易用,还能根据实际性能和环境需求灵活选择和扩展锁的...

    spring_aop.zip

    "spring-aop.jar"包含了Spring AOP框架的核心类和接口,如org.springframework.aop.*包下的内容,它提供了基于代理的AOP实现。而"spring-aspects.jar"则包含了一些预定义的AspectJ切面,比如事务管理方面的支持。 ...

    spring2-aop.pdf

    - **基于 API 方式来使用 Spring AOP**:通过编程的方式配置切面和通知。 ##### 5.4 Spring 中的 AOP 实现及应用 - **Spring AOP 实现**:Spring 使用代理模式实现 AOP 功能,支持基于接口的动态代理和 CGLIB 字节...

    spring AOP三种开发方式以及demo

    本篇文章将详细探讨Spring AOP的三种主要开发方式:基于Java API、自定义切面和Spring注解开发,并通过示例来帮助你深入理解其工作原理。 ### 1. 基于Java API的AOP开发 Spring AOP API提供了一组类和接口,如`org...

Global site tag (gtag.js) - Google Analytics