`
jiagou
  • 浏览: 2594585 次
文章分类
社区版块
存档分类
最新评论

Spring Aop例子(实现接口)

 
阅读更多

由于单独的Aop需要在Xml中配置好多,在Spring中,Spring提供了接口来拦截方法,这使得更简便

下面是例子:

beans.xml

<?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:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
	default-lazy-init="false" default-autowire="no">
	<bean id="around" class="org.hzy.advices.AroundAdvice"></bean>
	<bean id="before" class="org.hzy.advices.BeforeAdvice"></bean>
	<bean id="after" class="org.hzy.advices.AfterAdvice"></bean>
	<bean id="student" class="org.hzy.dao.impl.StudentImpl"></bean>
	<aop:config>
		<aop:pointcut id="target" expression="execution(* org.hzy.dao.impl.StudentImpl.addStudent(..))"/>
		<!-- <aop:advisor id="be" advice-ref="before" pointcut-ref="target"/> -->
		<!-- <aop:advisor id="af" advice-ref="after" pointcut-ref="target"/> -->
		<aop:advisor id="ar" advice-ref="around" pointcut-ref="target"/><!-- 不是不需要切面,而是它已经包含了切面 -->
	</aop:config>
</beans>

AroundAdvice.java

package org.hzy.advices;

import java.lang.reflect.Method;

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

public class AroundAdvice implements MethodInterceptor{//相当于环绕通知

	public Object invoke(MethodInvocation arg0) throws Throwable {//arg0相当于struts2的拦截器的调用者actionInvocation
		// TODO Auto-generated method stub
		System.out.println("进入拦截方法!!!!!!!!");
		Method me=arg0.getMethod();
		System.out.println(me.getName());
		System.out.println(arg0.getArguments()[0]);
		Object result=null;
		String stu_name=arg0.getArguments()[0].toString();
		if("hzy".equals(stu_name)){
			 result= arg0.proceed();
		}else{
			 System.out.println("此学生是"+stu_name+"而不是dragon,不批准其加入.");
		}
		return result;
	}
	
}

BeforeAdvice.java

package org.hzy.advices;

import java.lang.reflect.Method;

import org.springframework.aop.MethodBeforeAdvice;

public class BeforeAdvice implements MethodBeforeAdvice{//相当于前置通知

	public void before(Method method, Object[] args, Object target)
			throws Throwable {
		// TODO Auto-generated method stub
		System.out.println( " 这是BeforeAdvice类的before方法. " );
//		args[0]="hzy";
		System.out.println(args[0]);
	}
	
}

AfterAdvice.java

package org.hzy.advices;

import java.lang.reflect.Method;

import org.springframework.aop.AfterReturningAdvice;

public class AfterAdvice implements AfterReturningAdvice{//相当于后置通知

	public void afterReturning(Object returnValue, Method method,
			Object[] args, Object target) throws Throwable {
		// TODO Auto-generated method stub
		System.out.println("这是AfterAdvice类的afterReturning方法.");
		System.out.println(target.getClass());
	}
	
}

IStudent.java

package org.hzy.dao;

public interface IStudent {
	public void addStudent(String name);
}

StudentImpl.java

package org.hzy.dao.impl;

import org.hzy.dao.IStudent;

public class StudentImpl implements IStudent {

	public void addStudent(String name) {
		// TODO Auto-generated method stub
		System.out.println( " 欢迎  " + name + "  你加入Spring家庭! " );
	}
	
}

package org.hzy.test;

import org.hzy.dao.IStudent;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyTest2 {
	public static void main(String[] args) {
		ApplicationContext ctx=new ClassPathXmlApplicationContext("beans1.xml");
		IStudent st=(IStudent) ctx.getBean("student");
		st.addStudent("aa");
	}
}

注意:这只是Spring中的模仿Aop,你也可以配置Aop来操作




分享到:
评论
1 楼 canghaifuyun1987 2012-12-16  
lz 我来关注下你呗,写的好

相关推荐

    简单spring aop 例子

    现在,我们来看如何创建一个简单的Spring AOP例子: 1. **定义切面(Aspect)**:切面是包含通知(Advice)和切入点(Pointcut)的类。通知定义了要执行的逻辑,切入点定义了何时执行。例如,我们可以创建一个名为`...

    反射实现 AOP 动态代理模式(Spring AOP 的实现 原理) - Java 例子 -

    在Spring AOP中,`Proxy`类会根据目标对象的接口生成一个代理类,这个代理类会实现目标对象的所有接口,并在每个方法调用前后插入相应的通知。`InvocationHandler`接口定义了一个`invoke`方法,当调用代理对象的方法...

    springAop的配置实现

    - 当目标类实现了接口时,Spring AOP会选择使用JDK动态代理。它会生成一个实现了目标类所有接口的代理类,并在调用接口方法时插入通知代码。 **3. CGLIB代理** - 如果目标类没有实现接口,Spring AOP会使用CGLIB...

    SpringAOP的例子

    在这个"SpringAOP的例子"中,我们将深入探讨如何在Eclipse环境下利用Spring AOP和动态代理来实现这些功能。 首先,让我们理解什么是AOP。AOP是一种编程范式,旨在减少代码的重复性和增强可维护性。在传统的OOP中,...

    spring aop简单例子

    现在,我们来看一个简单的Spring AOP例子: 首先,我们需要定义一个切面,包含一个通知。例如,我们创建一个名为`LoggingAspect`的类,其中有一个`logExecutionTime`方法作为前置通知,记录方法的执行时间: ```...

    理解Spring AOP实现与思想 案例代码

    2. **Spring AOP实现方式** - **代理模式**:Spring AOP使用两种代理方式,JDK动态代理和CGLIB代理。如果目标类实现了接口,Spring会使用JDK动态代理;如果没有实现接口,Spring会使用CGLIB代理生成子类。 - **JDK...

    SpringAOP例子

    在这个"SpringAOP例子"中,我们将探讨Spring AOP如何实现以及如何在实际项目中应用。 首先,Spring AOP通过代理模式实现了面向切面编程。它提供了两种类型的代理:JDK动态代理和CGLIB代理。JDK动态代理基于接口,当...

    Spring.net Aop 例子

    这种方式简单且高效,但仅限于接口实现。 2. **基于类型(TypeProxy)**:如果目标对象没有接口或者需要代理非公共成员,可以使用TypeProxy。它通过继承目标对象的类型来创建代理,因此能够代理非接口方法和私有...

    spring aop的demo

    在`springAop1`这个压缩包中,可能包含了一个简单的应用示例,展示了如何定义一个切面类,以及如何在该类中定义通知方法。例如,我们可能会看到一个名为`LoggingAspect`的类,其中包含了`@Before`注解的方法,用于在...

    springioc和spring aop

    Spring通过反射机制来实现这一过程,比如在上述的`TestIOC`例子中,Spring能够根据类名动态地创建对象,并通过setter方法注入属性值,实现了对象的实例化和配置。 **依赖注入(DI)**有多种实现方式,包括构造器...

    springAop与spring定时器

    Spring的定时任务功能则是通过`@Scheduled`注解和`TaskScheduler`接口实现的。`@Scheduled`注解可以标注在方法上,声明该方法为定时任务,可以设置cron表达式或fixedRate/fixedDelay参数来指定执行频率。`Task...

    spring aop xml实现

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许程序员在不修改源代码的情况下,通过在关键点(切点)插入拦截器(通知)来增强功能,实现横切关注点,如日志、事务管理等。XML配置是Spring AOP早期...

    Spring Aop使用实例

    这个项目很可能是包含了一个Spring AOP的实战例子,可能包含了以下内容: - `LoggingAspect`类:定义切面,包含`@Before`和`@After`通知。 - `Service`接口及其实现:业务层接口和实现,被AOP代理。 - `...

    Spring AOP需要的jar

    这些接口为创建和使用切面提供了通用的API,无论你选择使用Spring自己的AOP还是其他AOP实现,如AspectJ,都可以通过aopalliance来实现无缝集成。 另一方面,aspectjweaver-1.8.9.jar是AspectJ库的一部分,用于实现...

    spring之AOP(动态代理)

    JDK动态代理基于Java的接口实现,它适用于目标对象实现了至少一个接口的情况。在运行时,JDK动态代理会创建一个新的类,该类实现目标对象的所有接口,并在方法调用时插入自定义的行为(通知)。Spring的`java.lang....

    Spring AOP学习资料(pdf)

    编程方式**:通过自定义类实现Spring提供的AOP接口,如`MethodBeforeAdvice`、`AfterReturningAdvice`等。 #### 五、Spring AOP 的应用场景 Spring AOP广泛应用于以下场景: - **日志记录**:自动记录方法调用的...

    使用Spring配置文件实现AOP

    这篇教程将详细讲解如何通过Spring的配置文件来实现AOP。 一、理解AOP概念 AOP的核心思想是将分散在各个模块中的交叉性代码(如日志、事务处理)抽取出来,形成独立的切面,以便于复用和维护。它提供了一种模块化的...

    SpringAOP

    在上述的描述中,展示了通过接口实现AOP的例子。首先,创建了一个接口Hello,定义了sayHello()方法。接着,创建了一个实现类,实现了sayHello()方法。然后,通过实现MethodBeforeAdvice接口,定义了在sayHello()方法...

    spring aop 实现权限的简单示例

    在本示例中,我们将深入探讨如何利用Spring AOP实现简单的权限验证。 首先,AOP的核心概念是切面(Aspect),它封装了横切关注点,比如日志、事务管理、权限验证等。在Spring AOP中,切面通过通知(Advice)来定义...

    研究下Spring中AOP的实现?

    本篇文章将深入探讨Spring AOP的实现原理,并通过一个名为`myAOPExample`的示例来阐述其工作方式。 首先,理解AOP的基本概念至关重要。AOP的核心是切面(Aspect)、通知(Advice)、连接点(Join Point)、切点...

Global site tag (gtag.js) - Google Analytics