Java动态代理实现AOP编程问题示例

原创 柔情只为你懂 2024-12-09 22:00 94阅读 0赞

在Java中,动态代理是面向切面编程(AOP)的重要实现方式。下面是一个简单的AOP编程问题示例:

  1. 定义一个目标类(Subject)

    1. public class Subject {
    2. private String name;
    3. public Subject(String name) {
    4. this.name = name;
    5. }
    6. // 真实的业务逻辑
    7. public void doSomething() {
    8. System.out.println("Subject doing something: " + name);
    9. }
    10. }
  2. 定义一个切面(Advice)

    1. public class LoggingAspect implements advising interfaces {
    2. @Override
    3. public void before(ProceedingJoinPoint pjp) throws Throwable {
    4. System.out.println("Logging aspect entering: " + pjp.getSignature());
    5. }
    6. @Override
    7. public void afterThrowing(ThrowingJoinPoint pjp, Throwable t) throws Throwable {
    8. System.out.println("Logging aspect exiting due to exception: " + pjp.getSignature());
    9. }
    10. }
  3. 配置动态代理(创建代理类)
    ```java
    import java.lang.reflect.Method;
    import java.util.Arrays;

public class Main {

  1. public static void main(String[] args) throws Throwable {
  2. // 1. 创建目标类Subject
  3. Subject subject = new Subject("Example Subject");
  4. // 2. 创建切面LoggingAspect
  5. LoggingAspect loggingAspect = new LoggingAspect();
  6. // 3. 配置动态代理(创建代理类))
  7. // 使用Proxy.newProxyInstance()方法,传入参数:目标对象、实现接口、是否可变
  8. Class<?> proxyClass = Proxy.getProxyClass(subject.getClass(), loggingAspect.getClass()));
  9. // 4. 获取并使用代理对象
  10. Subject proxySubject = (Subject) proxyClass.newInstance();
  11. proxySubject.doSomething();
  12. // 5. 通过代理对象访问切面方法
  13. Method beforeMethod = loggingAspect.getClass().getMethod("before", proxySubject.getClass()));
  14. beforeMethod.invoke(loggingAspect);
  15. Method afterThrowingMethod = loggingAspect.getClass().getMethod("afterThrowing", proxySubject.getClass(), Arrays.asList(new Object[]{new Throwable("Test Exception")}}))));
  16. afterThrowingMethod.invoke(loggingAspect);
  17. }

}
```

以上示例中,我们创建了一个目标类Subject和一个切面类LoggingAspect。然后通过Proxy的代理机制,为这些类创建了动态代理对象。最后在代理对象上执行业务逻辑,并访问到切面方法。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,94人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java动态代理实现AOP问题案例

    在Java中,动态代理是一种机制,它允许我们创建一个行为与另一个完全不同的对象。这主要用于AOP(面向切面编程)中,用于控制对象的行为。 以下是一个简单的AOP问题案例: