由于单独的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来操作
分享到:
相关推荐
现在,我们来看如何创建一个简单的Spring AOP例子: 1. **定义切面(Aspect)**:切面是包含通知(Advice)和切入点(Pointcut)的类。通知定义了要执行的逻辑,切入点定义了何时执行。例如,我们可以创建一个名为`...
在Spring AOP中,`Proxy`类会根据目标对象的接口生成一个代理类,这个代理类会实现目标对象的所有接口,并在每个方法调用前后插入相应的通知。`InvocationHandler`接口定义了一个`invoke`方法,当调用代理对象的方法...
- 当目标类实现了接口时,Spring AOP会选择使用JDK动态代理。它会生成一个实现了目标类所有接口的代理类,并在调用接口方法时插入通知代码。 **3. CGLIB代理** - 如果目标类没有实现接口,Spring AOP会使用CGLIB...
在这个"SpringAOP的例子"中,我们将深入探讨如何在Eclipse环境下利用Spring AOP和动态代理来实现这些功能。 首先,让我们理解什么是AOP。AOP是一种编程范式,旨在减少代码的重复性和增强可维护性。在传统的OOP中,...
现在,我们来看一个简单的Spring AOP例子: 首先,我们需要定义一个切面,包含一个通知。例如,我们创建一个名为`LoggingAspect`的类,其中有一个`logExecutionTime`方法作为前置通知,记录方法的执行时间: ```...
2. **Spring AOP实现方式** - **代理模式**:Spring AOP使用两种代理方式,JDK动态代理和CGLIB代理。如果目标类实现了接口,Spring会使用JDK动态代理;如果没有实现接口,Spring会使用CGLIB代理生成子类。 - **JDK...
在这个"SpringAOP例子"中,我们将探讨Spring AOP如何实现以及如何在实际项目中应用。 首先,Spring AOP通过代理模式实现了面向切面编程。它提供了两种类型的代理:JDK动态代理和CGLIB代理。JDK动态代理基于接口,当...
这种方式简单且高效,但仅限于接口实现。 2. **基于类型(TypeProxy)**:如果目标对象没有接口或者需要代理非公共成员,可以使用TypeProxy。它通过继承目标对象的类型来创建代理,因此能够代理非接口方法和私有...
在`springAop1`这个压缩包中,可能包含了一个简单的应用示例,展示了如何定义一个切面类,以及如何在该类中定义通知方法。例如,我们可能会看到一个名为`LoggingAspect`的类,其中包含了`@Before`注解的方法,用于在...
Spring通过反射机制来实现这一过程,比如在上述的`TestIOC`例子中,Spring能够根据类名动态地创建对象,并通过setter方法注入属性值,实现了对象的实例化和配置。 **依赖注入(DI)**有多种实现方式,包括构造器...
Spring的定时任务功能则是通过`@Scheduled`注解和`TaskScheduler`接口实现的。`@Scheduled`注解可以标注在方法上,声明该方法为定时任务,可以设置cron表达式或fixedRate/fixedDelay参数来指定执行频率。`Task...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许程序员在不修改源代码的情况下,通过在关键点(切点)插入拦截器(通知)来增强功能,实现横切关注点,如日志、事务管理等。XML配置是Spring AOP早期...
这个项目很可能是包含了一个Spring AOP的实战例子,可能包含了以下内容: - `LoggingAspect`类:定义切面,包含`@Before`和`@After`通知。 - `Service`接口及其实现:业务层接口和实现,被AOP代理。 - `...
这些接口为创建和使用切面提供了通用的API,无论你选择使用Spring自己的AOP还是其他AOP实现,如AspectJ,都可以通过aopalliance来实现无缝集成。 另一方面,aspectjweaver-1.8.9.jar是AspectJ库的一部分,用于实现...
JDK动态代理基于Java的接口实现,它适用于目标对象实现了至少一个接口的情况。在运行时,JDK动态代理会创建一个新的类,该类实现目标对象的所有接口,并在方法调用时插入自定义的行为(通知)。Spring的`java.lang....
编程方式**:通过自定义类实现Spring提供的AOP接口,如`MethodBeforeAdvice`、`AfterReturningAdvice`等。 #### 五、Spring AOP 的应用场景 Spring AOP广泛应用于以下场景: - **日志记录**:自动记录方法调用的...
这篇教程将详细讲解如何通过Spring的配置文件来实现AOP。 一、理解AOP概念 AOP的核心思想是将分散在各个模块中的交叉性代码(如日志、事务处理)抽取出来,形成独立的切面,以便于复用和维护。它提供了一种模块化的...
在上述的描述中,展示了通过接口实现AOP的例子。首先,创建了一个接口Hello,定义了sayHello()方法。接着,创建了一个实现类,实现了sayHello()方法。然后,通过实现MethodBeforeAdvice接口,定义了在sayHello()方法...
在本示例中,我们将深入探讨如何利用Spring AOP实现简单的权限验证。 首先,AOP的核心概念是切面(Aspect),它封装了横切关注点,比如日志、事务管理、权限验证等。在Spring AOP中,切面通过通知(Advice)来定义...
本篇文章将深入探讨Spring AOP的实现原理,并通过一个名为`myAOPExample`的示例来阐述其工作方式。 首先,理解AOP的基本概念至关重要。AOP的核心是切面(Aspect)、通知(Advice)、连接点(Join Point)、切点...