Java代理和AOP是Java編程中非常重要的兩個概念。Java代理,簡單理解可以是利用代理人來完成一些需要做的任務;AOP是面向切面編程的概念,是一種基于注解的編程模式。
Java代理的實現方式有兩種:靜態代理和動態代理。
public interface UserService{ void addUser(); } public class UserServiceImpl implements UserService{ @Override public void addUser() { //添加用戶的業務邏輯 } } //靜態代理 public class UserServiceProxy implements UserService{ private UserService userService; public UserServiceProxy(UserService userService) { this.userService = userService; } @Override public void addUser() { System.out.println("添加用戶前的操作"); userService.addUser(); System.out.println("添加用戶后的操作"); } } //動態代理 public class DynamicProxy implements InvocationHandler { private Object object; public DynamicProxy(Object object) { this.object = object; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //前置操作 Object result = method.invoke(object, args); //后置操作 return result; } }
AOP是一種編程思想,它允許將橫切關注點(例如日志記錄和事務管理)從業務主體中分離出來,可以通過注解和切面將這些代碼織入到原本的方法中。
public class UserController { @OperationLog(module="用戶管理", operation="添加用戶") @Transactional public void addUser() { //添加用戶的業務邏輯 } } @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface OperationLog { String module(); String operation(); } @Aspect @Component public class LogAspect { @Around("@annotation(operationLog)") public Object operationLog(ProceedingJoinPoint joinPoint, OperationLog operationLog) throws Throwable { System.out.println("模塊:" + operationLog.module()); System.out.println("操作:" + operationLog.operation()); Object result = joinPoint.proceed(); System.out.println("返回值:" + result); return result; } }
以上就是Java代理和AOP的簡要介紹和實現代碼。