第一:一个配置文件config.properties写道
#*** = java.util.ArrayList
*** = com.css.aopframework.ProxyFactoryBean
***.advice = com.css.aopframework.MyAdvice
***.target =java.util.ArrayList
写道
package com.css.aopframework;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyFactoryBean {
private Object target ;
private Advice advice ;
public Object getProxy() {
Object proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(),
/*new Class[]{Collection.class},*/
target.getClass().getInterfaces(),
new InvocationHandler(){
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
advice.beforeMehod(method);
Object returnValue = method.invoke(target, args);
advice.afterMehod(method);
return returnValue;
}
});
return proxy;
}
public Object getTarget() {
return target;
}
public void setTarget(Object target) {
this.target = target;
}
public Advice getAdvice() {
return advice;
}
public void setAdvice(Advice advice) {
this.advice = advice;
}
}
写道
package com.css.aopframework;
import java.lang.reflect.Method;
public interface Advice {
/**
*
*/
void beforeMehod(Method method);
/**
*
*/
void afterMehod(Method method);
}
写道
package com.css.aopframework;
import java.lang.reflect.Method;
public class MyAdvice implements Advice {
long beginTime = 0;
public void afterMehod(Method method) {
System.out.println(">>>>>>>>>>>>>>:after method ");
long endTime = System.currentTimeMillis();
System.out.println(method.getName()+" running time is :"+ (endTime-beginTime));
}
public void beforeMehod(Method method) {
System.out.println(">>>>>>>>>>>>>>:before method ");
beginTime = System.currentTimeMillis();
}
}
分享到:
相关推荐
- 当目标对象实现了至少一个接口时,Spring会使用JDK的java.lang.reflect.Proxy类创建一个代理对象。 - 代理对象在调用实际方法前后,会插入相应的通知代码,从而实现AOP功能。 - **CGLIB代理**: - 如果目标...
NULL 博文链接:https://zhang-yingjie-qq-com.iteye.com/blog/319927
基于注解实现SpringAop基于注解实现SpringAop基于注解实现SpringAop
现在,我们来看如何创建一个简单的Spring AOP例子: 1. **定义切面(Aspect)**:切面是包含通知(Advice)和切入点(Pointcut)的类。通知定义了要执行的逻辑,切入点定义了何时执行。例如,我们可以创建一个名为`...
在这个基于配置文件的实现中,我们首先需要在Spring配置文件(如applicationContext.xml)中定义一个切面。切面通常由一个或多个通知组成,我们可以使用`<aop:config>`标签来声明切面。例如: ```xml <aop:config> ...
这个"spring aop jar 包"包含了实现这一功能所需的类和接口,使得开发者能够轻松地实现面向切面的编程。 在Spring AOP中,主要涉及以下几个核心概念: 1. **切面(Aspect)**:切面是关注点的模块化,比如日志记录...
在这个场景中,我们将使用Spring AOP来实现一个日志记录的功能,以追踪系统中各个方法的调用情况,包括访问时间以及传递的参数。下面将详细阐述如何实现这一目标。 首先,我们需要了解AOP的基本概念。AOP的核心是切...
以提供的文件内容为例,通过实现一个接口IHello,我们可以创建一个名为Hello的类,该类实现IHello接口,并打印出“Hello”加上传入的姓名。为了在不改变原代码的情况下增加日志记录功能,我们创建了一个名为...
4. **aopalliance-1.0.jar**:AOP Alliance是一个包含AOP领域通用接口的库,旨在促进不同AOP实现之间的互操作性。Spring AOP就是基于这些接口进行设计的,因此这个库是Spring AOP和其他AOP实现之间协作的基础。 在...
引介(Introduction)是Spring AOP的一个特性,允许在通知对象中声明并实现它们原本未实现的额外接口。通过`@DeclareParents`注解可以实现引介。 连接点(Joint Point)是程序执行过程中的特定点,通常在Spring AOP...
项目的源码包含了一个简单的Spring AOP示例,可能包括以下几个部分: 1. `Aspect`类:包含了切面逻辑的类,通常有多个通知方法。 2. `Service`类:业务逻辑类,切面将会影响到的方法。 3. `Spring配置文件`:定义了...
CGLIB是一个强大的高性能的代码生成库,它会在运行期动态生成子类并覆盖父类的方法来实现AOP的功能。 **4. 配置Spring AOP** 在Spring XML配置文件中,我们可以定义以下元素来实现AOP配置: - `<aop:config>`:声明...
【Spring AOP实现方法大全】 在Spring框架中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种强大的设计模式,它允许我们在不修改业务代码的情况下,插入额外的功能,比如日志记录、事务管理等。在...
"Spring AOP 框架实现的结构分析" 本文主要目标是从实现的...本文的风格是首先列出 AOP 的基本概念,然后介绍框架所涉及到的核心组件列表,组件之间的结构关系图,然后细化结构图中的部分,最后是一个简单的 sample。
它包含了一些基本的AOP概念,如Advisor、Pointcut和Proxy等,是连接不同AOP实现的桥梁。 这些库的组合使得Spring AOP能够有效地工作。使用Spring AOP,开发者可以定义切面,声明切入点(即关注点的定位),编写通知...
2. **定义切面**:创建一个Spring AOP切面,这个切面将包含一个或多个通知(advice),用于拦截特定的数据库操作。例如,我们可以创建一个`@Before`通知,检查方法的注解或方法名,以判断是读操作还是写操作。 3. *...
Spring AOP(面向切面编程)是Spring框架中的一个重要组件,它允许我们在不修改源代码的情况下,对程序的行为进行统一的管理和控制。本篇文章将深入探讨Spring AOP的内部实现,以及如何通过源代码理解其DataSource...
在Spring AOP的例子中,我们可能会创建一个`@RunWith(SpringJUnit4ClassRunner.class)`标记的测试类,以利用Spring的测试支持。在测试方法中,可以注入需要的bean,然后调用方法来触发AOP代理。这样,通知将在适当的...
2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑实现 (需要知道原理的请看spring aop源码,此处不做赘述) 3、可在现有源码上快速进行功能扩展 4、spring boot,mybatis,druid,spring aop的使用