AOP原理学习笔记

本文介绍了面向切面编程(AOP)的概念,它在面向对象编程基础上提供了一种更高级的设计思想。通过AOP,可以将横切关注点如日志记录等从核心业务代码中解耦。示例展示了如何使用Java动态代理实现AOP,通过DyProxy类创建代理对象,实现在方法调用前后插入日志记录,从而在不修改原有业务代码的情况下增强功能。
摘要由CSDN通过智能技术生成

AOP是面向切面编程,是在OOP基础之上的一种更高级的设计思想。AOP侧重于方面组件,方面组件可以理解成封装了通用功能的组件,方面组件可以通过配置方式,灵活地切入到某一批目标对象方法上。—封装功能,能在不影响原有功能的前提下,为软件横向扩展功能,当我们需要为多个对象引入一个公共行为,如日志,操作记录,这时需要在每个对象中引用公共行为,这样编写程序时容易产生重复的代码,AOP编程可以解决这个问题。
AOP是面向切面编程,测试性能 统一日志 事务管理。
@Target(value=ElementType.TYPE)
@Retention(value=RetentionPolicy.RUNTIME)
AOP动态代理原理进行,动态代理采用的就是JDK代理,被代理对象需要执行的行为,代理对象来代理执行的操作叫做代理,动态代理的代理类是在程序运行时创建的。
invoke()方法使用了JDK动态代理模式,真正的方法执行在invoke()方法里。
例:
DyProxy.java
package com.icss.biz;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Date;
public class DyProxy {
private Object toProxyobj;
public Object getProxyObject(Object object) {
this.toProxyobj=object;
return Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces() , new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// TODO 自动生成的方法存根
long startTime=new Date().getTime();
Object result=method.invoke(toProxyobj, args);
long endTime=new Date().getTime();
long totalTime=endTime-startTime;
System.out.println(“函数执行了”+totalTime);
return result;
}
});
}
}

UserServiceImpl.java
package com.icss.biz;
public class UserServiceImpl implements UserSrevice {
@Override
public void login() {
}
@Override
public void logout() {
}
@Override
public void getUserList() {
}
}

TestAOP.java
package com.icss.ui;
import com.icss.biz.DyProxy;
import com.icss.biz.UserServiceImpl;
public class TestAOP {
public static void main(String[] args) {
//AOP是面向切面编程,测试性能 统一日志 事务管理
UserServiceImpl us=(UserServiceImpl)new DyProxy().getProxyObject(new UserServiceImpl());
us.getUserList();
us.login();
us.logout();
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值