当前位置: 首页 > 面试题库 >

Spring AOP不适用于另一个方法中的方法调用

甄阿苏
2023-03-14
问题内容

ABC.java中定义了两种方法

public void method1(){
   .........
   method2();
  ...........
}


public void method2(){
  ...............
  ...............  
}

我想有AOP上的呼叫方法2。所以,我创建了一个类,AOPLogger.java,具有在方法提供方面功能的checkAccess
配置文件中,我不喜欢的东西下面

<bean id="advice" class="p.AOPLogger" />
<aop:config>
  <aop:pointcut id="abc" expression="execution(*p.ABC.method2(..))" />
  <aop:aspect id="service" ref="advice">
    <aop:before pointcut-ref="abc" method="checkAccess" />          
  </aop:aspect>
</aop:config>

但是当调用我的method2时,不会调用AOP功能,即不会调用AOPLogger类的checkAccess方法。


问题答案:

该方面应用于围绕bean 的代理。请注意,每次获得对bean的引用时,实际上并不是配置中引用的类,而是实现相关接口的综合类,该类委托实际的类并添加功能(例如AOP)。

在上面的示例中,你直接在类上调用,而如果将该类实例作为Spring bean注入到另一个实例中,则将其作为其代理注入,因此将在代理上调用方法调用(并且将触发方面) )

如果要实现上述目标,则可以将method1/ 拆分method2为单独的bean,或使用非基于Spring的AOP框架。



 类似资料:
  • 我在我的服务层有一个方法: [1]这一行获取条形码,比如然后调用另一个类中的一个方法,该方法从数据库中检索有关该项目的信息,执行计算并返回价格。可能的值可以类似于。 [2]按价格对所有值进行升序排序。因此,如果列表包含和和,则将其排序为和。 当我尝试测试此方法时,当调用时,我得到空指针异常。我如何测试这个方法?我试着搜索并找到了一些关于使用mockito的问题和答案,但我不知道如何实现它。 我目前

  • 问题内容: 我实际上正在尝试用Java进行此操作,但是我正在自学python,这让我想知道是否存在使用包装器或类似方法进行此操作的简便/明智的方法。 我想知道一个特定方法在另一个方法中被调用了多少次。例如: 因此,对于每次使用各种参数调用bar的情况,我想知道foo被调用了多少次,也许是这样的输出: 编辑:我知道我可以在柜台内拍一个计数器,然后在返回时丢弃它,但是如果可以使用包装器完成相同的操作,

  • 问题内容: 我有 但后来当我打电话从通过运行以下命令在命令行上,JAVA抱怨说,你不能调用从静态功能的方法。 所以我的问题是:如何从主方法调用方法,如果不可能,使用java命令从命令行运行程序后,有哪些替代策略可以调用方法。 问题答案: 您只能针对类的实例调用类似的实例方法(顺便说一下,这是一个非法的方法名称): 另外,如果对您的设计有效,则也使它成为静态。

  • 问题内容: 在Bruce Eckel的“ Thinking In Java,第四版”的第428页(有关类型信息的章节)中,具有以下示例: 也许我有点累,但是我看不到add()方法中对add()的调用是如何工作的。我一直认为它应该有一个引用,或者是一个静态方法(并且我在ArrayList或List中找不到静态add())。我想念什么? 我只是为自己测试,发现这可行: 问题答案: Java为这样的方法

  • 我创建了两个类:和。下面是进行计算的方法: 这里是一个调用并显示结果的函数,不幸的是,我无法根据这本书要求它运行的方式来运行它。 任何提示都会帮助我在我的再教育过程中。

  • 我有一个层,称为,另一个称为。我想知道我是否可以强制执行一条规则,上面写着: 在参数列表包含名为foo的参数的服务层中的任何公共类的任何公共方法中,断言它从权限层调用方法(理想情况下,确保在服务层中的任何其他方法之前调用该方法)。 ArchUnit可以这样做吗?