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

使用MethodInterceptor包装对protected方法的调用

司空学智
2023-03-14
<bean id="sampleAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="proxyTargetClass" value="true" />
<property name="beanNames">
    <list>
        <value>thrirdPartyBean</value>
    </list>
</property>
<property name="interceptorNames">
    <list>
        <value>sampleAdvisor</value>
    </list>
</property>
</bean>
<bean id="sampleMethodNamePointcut" class="org.springframework.aop.support.NameMatchMethodPointcut">
    <property name="mappedNames">
        <list>
            <value>publicMethodThatWorks</value>
            <value>protectedMethodThatDoesNotWork</value>
        </list>
    </property>
</bean>
<bean id="sampleAdvice" class="sample.MyMethodInterceptor" />
<bean id="sampleAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
    <property name="pointcut" ref="sampleMethodNamePointcut" />
    <property name="advice" ref="sampleAdvice" />
</bean>

共有1个答案

东方英豪
2023-03-14

正如注释中链接的问题/答案所述,Springs AOP代理只能应用于public方法。

对于JDK代理,这是不可能的,因为代理只有目标对象的接口类型,所以您只能通过其public方法与其交互(请记住,接口中声明的所有方法都是public)。

使用GGLIB代理,因为代理确实具有目标对象的类类型,所以可以与其protected方法交互。我认为,出于代理机制之间一致性的原因,他们不会允许这样做。

 类似资料:
  • 本文向大家介绍使用对象封装ajax重复调用的方法,包括了使用对象封装ajax重复调用的方法的使用技巧和注意事项,需要的朋友参考一下 在项目中经常用到AJAX调用远程数据,每一次调用,都得写一个ajax方法,这就造成了重复代码过多,可读性也不够强,所以,我一般都是封装起来,需要的时候调用。 以上所示是本文给大家分享使用对象封装ajax重复调用的方法,希望对大家有所帮助。

  • 问题内容: 我正在尝试制定以下方案中使用的规则。请解释为什么我得到2种不同的输出。 方案1的输出: 我是一个对象。 方案2的输出: 我是整数。 问题答案: 在Java语言规范说,这大约方法签名分辨率: 第一阶段(第15.12.2.2节)执行重载解析,不允许装箱或拆箱转换,也不允许使用可变Arity方法调用。如果在此阶段未找到适用的方法,则处理将继续进行到第二阶段。 在第二种情况下,涉及的方法签名适

  • 所以我试图实现类似于Kotlin协程的东西在Java 目前,我试图拦截方法时,一个方法调用Waitable.waitFor()调用和所有的方法主体后,Waitable.waitFor()应调度 但在我当前的代码中,它只拦截方法调用,之后的方法体不包括在内 所以我想知道我的切入点表达式代码是错的吗?或者有什么更好的方法来实现这一点?

  • 7.2.3 对象方法的调用 一旦创建了对象,就可以通过向对象发消息来调用对象的方法。消息的格式如下: <对象>.<方法>(<实参>) 其含义是请求<对象>执行<方法>,方法定义中列出的形式参数由<实参>提供。 例如,接着前面的例子执行如下语句: >>> p1.whatName() My name is Lucy >>> p2.whatName() My name is Tom >>> p2.ho

  • 我正在Java核心库中寻找一个静态方法,或者其他一些常用的依赖项(最好是Apache的依赖项),它可以实现以下功能: 你知道这种方法在哪里已经存在吗?因为我猜这个问题很常见,所以我不想重复它的解决方案。

  • 我最近开始编写单元测试,并开始转向集成测试。我有这个相当简单的方法,但我有点迷失在如何接近,甚至如何准确地测试它。 通过阅读各种文章和Sinon文档,听起来我可能需要为?即使我用一个好的响应伪造了外部API调用,但如果它总是返回一个好的响应,那又有什么好处呢?因为这个方法所做的一切都是将放在一起,并返回外部调用的响应。我对术语“stub”、“spy”和“mock”以及我需要为这个包装器方法做什么感