当前位置: 首页 > 知识库问答 >
问题:

内部和私有方法的AOP

安泰平
2023-03-14

我认为这是Spring AOP的局限性

@Aspect
public class BusinessProfiler {

  private static Log log = LogFactory.getLog(BusinessProfiler.class);


  @Around("execution(* *(..)) && @annotation(TimeLog)")
  public Object profile(ProceedingJoinPoint point) throws Throwable {
    long start = System.currentTimeMillis();
    Object result = point.proceed();
    String format =
        String.format("%s#%s: took [%s msec]", point.getTarget().getClass().getSimpleName(),
            MethodSignature.class.cast(point.getSignature()).getMethod().getName(),
            System.currentTimeMillis() - start);
    log.info(format);
    return result;
  }

}

除了Spring AOP还有别的选择吗

共有1个答案

祝高阳
2023-03-14

如果您考虑一下Spring处理AOP注释的方式,就会明白:

Spring接受您的类,并用添加的AOP注释动态生成的额外代码将其包装在代理中。因此,只有通过代理调用的代码(即从类外部调用的代码)才会被包括在内。

@Service
public class Foo {

  public void doSomething() {
      doSomethingInternal();
  }

  public void doSomethingInternal() {
  }
}
@Service
public class Bar {

  @Autowired
  private Foo foo;

  public void execute() {
      foo.doSomething();
  }
}
 类似资料:
  • 我需要捕获私有的内部调用方法。 然而,却始终得不到建议。我该怎么解决呢? 我也尝试过这个切入点: 和建议:

  • 问题内容: 如果我有一个包私有的Java类(用“ class”声明,而不是“ public class”),那么将内部方法声明为public或protected或package- private确实没有区别,对吗?那么我应该使用哪个,或者什么时候该使用呢?我有点困惑。 问题答案: 如果我有一个包私有的Java类(用“ class”声明,而不是“ public class”),那么将内部方法声明为p

  • 我在使用reflections api的公共类中的私有类中使用私有方法时遇到问题。下面是一个简化的代码示例: 同样,我希望能够实例化一个类对象,然后从私有类调用。我一直试图通过反射来做到这一点,但我似乎无法超过1级。此外,内部类可能有也可能没有大多数代码似乎使用的构造函数。上面的代码只是框架。 我当前的代码: 我查找了各种方法来获取内部类或私有方法,但找不到在不使用构造函数的情况下将外部对象获取到

  • 在 Python 的面向对象编程中,私有属性是只能在类的实例方法中访问的属性,不允许在外界访问私有属性。 1. 私有属性的定义 1.1 定义 在属性名称前加上前缀 __,表示该属性为私有属性,示例代码如下: class Object: def method(self): self.__private_attribute = 123 在第 3 行,创建一个私有属性 __pr

  • 问题内容: 如何对具有内部私有方法,字段或嵌套类的类进行单元测试(使用xUnit)?还是通过内部链接(static在C / C ++中)或在私有(匿名)名称空间中使其私有化的函数? 仅仅为了能够运行测试而更改方法或函数的访问修饰符似乎很糟糕。 问题答案: 更新: 大约十年后,测试私有方法或任何无法访问的成员的最佳方法可能是来自Manifold框架。 这样,您的代码将保持类型安全和可读性。没有设计折

  • 我创建了一个方法本地内部类并与抽象类结合。代码工作正常,但我不明白IntelliJ中关于我不能在内部类中设置方法的错误弹出窗口,该方法从抽象内部类扩展到私有。 我必须从“Private InnerClassSubclass”更改为“Public InnerClassSubclass”,如果我不这样做,错误如下: “InnerClassSubclass”中的“innerMethod()”与“Inne