java aop实现_模仿spring的aop实现代码

//无接口类的aop方法实现

package cn.wyz.aop;

import java.lang.reflect.Method;

import cn.wyz.service.impl.PersonServiceBean;

import net.sf.cglib.proxy.Enhancer;

import net.sf.cglib.proxy.MethodInterceptor;

import net.sf.cglib.proxy.MethodProxy;

public class CGlibProxyFactory implements MethodInterceptor{

private Object targetObject;

public Object creatProxyIntacce(Object targetObject){

this.targetObject=targetObject;

Enhancer enhancer=new Enhancer();

enhancer.setSuperclass(this.targetObject.getClass());//非final方法

enhancer.setCallback(this);

return enhancer.create();

}

public Object intercept(Object arg0, Method arg1, Object[] arg2,

MethodProxy arg3) throws Throwable {

PersonServiceBean bean=(PersonServiceBean)this.targetObject;

Object result=null;//环绕通知

if(bean.getUser()!=null){

//......advice()---->前置通知

try {

result=arg3.invoke(this.targetObject, arg2);

//..........afteradvice()------>后置通知

} catch (Exception e) {

//.....exceptionadvice()----->例外通知

e.printStackTrace();

}finally{

//.....finallyadvice()----->最终通知

}

}

return null;

}

}

//接口类的aop方法实现

package cn.wyz.aop;

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;

import java.lang.reflect.Proxy;

import cn.wyz.service.impl.PersonServiceBean;

public class JDKProxyFactory implements InvocationHandler {

private Object targetObject;

public Object creatProxyIntacce(Object targetObject){

this.targetObject=targetObject;

return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(),

this.targetObject.getClass().getInterfaces(), this);

}

public Object invoke(Object arg0, Method arg1, Object[] arg2)

throws Throwable {

PersonServiceBean bean=(PersonServiceBean)this.targetObject;

Object result=null;

if(bean.getUser()!=null){

arg1.invoke(this.targetObject, arg2);

}

return result;

}

}

posted on 2009-04-02 22:34 asiawang 阅读(291) 评论(0)  编辑  收藏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring AOPJava代码实现主要包括以下几个步骤: 1. 将业务逻辑类和切面类都加入到容器中,告诉Spring哪个类是切面类。在配置类中使用`@Bean`注解将业务逻辑类和切面类分别注入容器中。其中,业务逻辑类使用`MathCalculator`作为示例,切面类使用`AopLogAspect`作为示例。 2. 在切面类的每个通知方法上标注通知注解,告诉Spring何时何地运行。切面类中的通知方法使用注解标注,例如`@Before`、`@After`等,来指定在目标方法执行前、执行后等时机执行切面逻辑。通知方法所在的切面类使用`@Aspect`注解标注,以告诉Spring这是一个切面类。 3. 开启基于注解的AOP模式。在配置类上使用`@EnableAspectJAutoProxy`注解开启基于注解的AOP模式。这样Spring就会自动扫描切面类并将其应用到相应的目标方法上。 4. 编写测试类来验证AOP的功能。测试类使用`AnnotationConfigApplicationContext`来创建一个基于注解的应用上下文,并将配置类`ApiLogOfAop`作为参数传入。然后从应用上下文中获取`MathCalculator`的实例,并调用其方法进行测试。 以上是Spring AOPJava代码实现的主要步骤,通过将业务逻辑类和切面类加入容器、标注通知注解以及开启基于注解的AOP模式,可以实现对目标方法的切面逻辑的注入和执行。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [理解Spring AOP实现与思想 案例代码](https://download.csdn.net/download/qq_37171817/12502814)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Spring AOP的使用完整代码实现 (日志记录)-- 完整代码](https://blog.csdn.net/qq_41219586/article/details/122826601)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值