首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Spring AOP介绍不支持&& this(IntroducedInterface)

Spring AOP介绍不支持&& this(IntroducedInterface)
EN

Stack Overflow用户
提问于 2017-08-28 13:45:32
回答 2查看 221关注 0票数 0

我有以下几个方面

代码语言:javascript
运行
AI代码解释
复制
@Aspect
public class AspectClass{
   @DeclareParents(value="com.mac.model.*",defaultImpl=Impl.class)
   public IntroduceInterface inter;

   @Pointcut("execution(* com.mac.Employee.display(..))")
   public void empPointcut(){}

  @Before("empPointCut() && this(introduceInterface)")
  public void BeforeAdvice(JoinPoint jp,IntroduceInterface inf){
  inf.introMethod();
  }
}

我正在尝试从spring文档中复制代码,如下所示:

代码语言:javascript
运行
AI代码解释
复制
@Aspect
public class UsageTracking {

    @DeclareParents(value="com.xzy.myapp.service.*+", defaultImpl=DefaultUsageTracked.class)
    public static UsageTracked mixin;

    @Before("com.xyz.myapp.SystemArchitecture.businessService() && this(usageTracked)")
    public void recordUsage(UsageTracked usageTracked) {
        usageTracked.incrementUseCount();
    }

}

但是它不工作它给出的错误: IllegalArgumentException错误在::0在切入点中正式取消绑定

这是一个简单的spring应用程序,.What可能是它不工作的原因吗?

EN

回答 2

Stack Overflow用户

发布于 2017-08-28 16:39:36

在这里输入姓名

代码语言:javascript
运行
AI代码解释
复制
@Before("empPointCut() && this(_name_in_here_)")

应与中相同

代码语言:javascript
运行
AI代码解释
复制
public void BeforeAdvice(JoinPoint jp,IntroduceInterface _name_in_here_){

所以这应该可以很好地工作:

代码语言:javascript
运行
AI代码解释
复制
@Aspect
public class AspectClass{
   @DeclareParents(value="com.mac.model.*",defaultImpl=Impl.class)
   public IntroduceInterface inter;

   @Pointcut("execution(* com.mac.Employee.display(..))")
   public void empPointcut(){}

  @Before("empPointCut() && this(inf)")
  public void BeforeAdvice(JoinPoint jp,IntroduceInterface inf){
  inf.introMethod();
  }
}
票数 0
EN

Stack Overflow用户

发布于 2017-08-29 04:54:27

Annotation对象可通过annotation参数提供给通知。因此,这两个名称(方法参数名称和在切入点表达式中声明的注释)应该相同。

请看一下spring documentation - Passing parameters to advice中的这两部分。

来自Spring文档:

代理对象( this)、目标对象( target)和注释( @within、@target、@annotation、@args)都可以以类似的方式进行绑定。下面的示例展示了如何匹配使用@Auditable注解注释的方法的执行,并提取审计代码。

首先是@Auditable注释的定义:

代码语言:javascript
运行
AI代码解释
复制
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Auditable {
    AuditCode value();
}

然后是与@Auditable方法的执行相匹配的建议:

代码语言:javascript
运行
AI代码解释
复制
@Before("com.xyz.lib.Pointcuts.anyPublicMethod() && @annotation(**auditable**)")
public void audit(Auditable **auditable**) {
    AuditCode code = auditable.value();
    // ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45920565

复制
相关文章
Spring AOP介绍(一)之 Spring AOP 基础介绍
AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。与OOP对比,AOP面向切面,传统的OOP开发中,代码逻辑是自上而下的,在这些自上而下的过程中,会产生一些横切性的问题,这些横切性的问题和我们的主业务逻辑关系不大,会散落在代码的各个地方,造成难以维护,AOP的变成思想就是把业务逻辑和横切的问题进行分离,从而达到解耦的目的,提到代码的可重用性与开发效率。
zoro
2019/04/11
1.5K0
Spring AOP介绍(一)之 Spring AOP 基础介绍
Spring AOP详细介绍
AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子。
全栈程序员站长
2022/09/06
4670
Spring AOP详细介绍
Spring AOP简单介绍
面向切面编程(Aspect-Oriented Programming)是一种编程范式,旨在通过将横切关注点与主要业务逻辑分离,提供一种更好的代码组织和模块化的方式。
关忆北.
2023/10/11
1750
Spring AOP简单介绍
Spring Aop详细介绍
对于我们使用者而言十分简单便利,然而,其背后所做的事,却远远比一个注解复杂的多了,本篇只是简略的介绍一下@EnableAspectJAutoProxy背后所发生的那些事,了解其工作原理,才能更好的运用,并从中领略大师的智慧.
SerMs
2022/03/30
6020
Spring Aop详细介绍
Spring AOP 介绍与应用
        Spring的AOP想必大家都是比较清楚的,从spring 3.x版本出现之后,AOP的概念更加清晰,使用也更加方便。我看过很多书,讲解spring的aop,里面都有太多的概念,看到最后,还是不懂,有些云里雾里的,但是在使用了这么长时间以来,我觉得有些书上讲的太过繁琐了,或者说一下讲的太深入,太抽象让人难以理解。下面我会尽自己的可能让大家弄懂什么是AOP,并解释一个实际当中的应用实例,让大家真正理解AOP的灵活,有什么错误的地方欢迎大家私信(评论)我。
actionzhang
2022/11/30
3110
Spring AOP 介绍与应用
Spring AOP
在专栏第一篇我们就简单说了Spring框架提供了对AOP的支持,那Spring AOP和AOP有什么不同吗?
终有救赎
2023/10/16
1900
Spring AOP
从 AbstractPointcutAdvisor 开始: Spring AOP 之 Advisor、PointcutAdvisor 介绍
为了能够更好地将系统级别的代码抽离出来,去掉与对象的耦合,就产生了面向AOP(面向切面)。AOP全称 Aspect-Oriented Programming , 即面向切面编程。
一个会写诗的程序员
2021/04/02
2.9K0
Spring AOP
( Aspect Orient Programming ) 面向切面编程,是面向对象编程(OOP) 的一种补充。
Qwe7
2022/08/12
4610
Spring AOP
Spring 提供了两种方式来生成代理对象: JDKProxy 和 Cglib,具体使用哪种方式生成由AopProxyFactory 根据 AdvisedSupport 对象的配置来决定。默认的策略是如果目标类是接口,则使用 JDK 动态代理技术,否则使用 Cglib 来生成代理。
红目香薰
2022/11/29
3030
Spring AOP
在软件开发中,散布于应用中多处的功能被称为横切关注点(crosscutting concern)。通常来讲,这些横切关注点从概念上是与应用的业务逻辑相分离的(但是往往会直接嵌入到应用的业务逻辑之中)。把这些横切关注点与业务逻辑相分离正是面向切面编程(AOP)所要解决的问题。
Steve Wang
2022/05/10
5360
Spring AOP
Spring:AOP
解决问题的困难:要抽取的代码在方法内部,靠以前把子类中的重复代码抽取到父类的方式没法解决。所以需要引入新的技术。
愷龍
2023/02/10
2220
Spring:AOP
Spring AOP
Spring AOP 使用场景蛮多的属性检查、日志等,所有拦截下来可以在切面共同做的事儿似乎都可以用AOP(面向切面)的方式解决。在面试的过程中AOP 也是除Ioc及MVC 以外问的较多的一个点,通常是这样的: AOP 是什么?面向切面编程。 Spring AOP 是如何实现的? 配置下拦截器,完成具体的处理逻辑,其实本质就是一个动态代理。 那Spring 实现动态代理的方式有哪些?CGLib、JDK 原生 那这两种方式默认使用哪一种,如何指配?#&@¥&@¥&@#¥& 那JDK 原生方式与CGlib 区别说一下?&&#¥#¥ 提到了CGlib的实现是ASM,那ASM 具体的原理是怎样的?#&@¥&@¥&@#¥& 说一下ASM 几个核心的函数?#&@¥&@¥&@#¥& 说一下ASM 操作的过程中,JVM 里都发生了哪些事儿?#&@¥&@¥&*@#¥& 刚才说了这么多反射还有JVM 相关的,如果使用反射的方式向一个List<String> ,插入一个Integer,是正常还是Error,为什么? 好的,咱来谈谈泛型的擦除。所以会很容易被转移话题的。 其实AOP 相对于具体语言的实现细节,最主要的是它的实现思想。 先说一下思想: AOP 面向切面编程,算是对oop 面向对象编程的一种补充,指的在许多流程中都存在某些点需要做类似的事儿,可以将这个点设置为横切关注点(相对的业务处理的是核心关注点),完后完成对应事件的设定。 这种场景比如说权限检查、日志等。。 要理解整个AOP 过程还需要一点关键词: 横切关注点: 具体需要拦截的点,一种发现的过程 切面(aspect): 对横切关注点的一种抽象,一种抽象的过程 连接点(joinpoint):要被拦截到的具体点 切入点(pointcut):对于连接点进行,一种设置拦截定义的过程 通知(advice):具体就是指的拦截到具体的连接点之后的要执行的逻辑代码,分为:前置、后置、最终、环绕 这五类通知 目标对象:代理的目标对象 织入(weave):将切面应用到目标对象,并创建对应对象代理创建的过程 引入(introduction):动态代理运行的过程 然后是AOP 后续具体的使用细节及实现原理: 使用过程大体是这样的: 1、检查业务组件,查看是否存在大量可横切点 2、定义切入点 3、定义增强处理,就是切入点前后的具体通知 4、设置完成,实现对应AOP 操作 Spring 对AOP 的支持是建立在Ioc 的基础上的,也就是AOP 代理有Ioc 容器负责处理依赖关系,及其生成和管理。 那么Spring AOP 所依赖的Ioc 里面使用代理的方式是默认使用JDK 原生方式,也可以选配CGlib实现。 在使用层面上,JDK 要求实现接口,而CGlib 不用,可以基于类实现。 JDK 是根据接口实现一个具体的class 对象然后加载到具体的堆和方法区完成的实现。 CGlib 是依赖于ASM ,通过字节码操作根据现有的类,通过添加字节码的方式构建一个新的对应类的子类来完成对应的实现。 就当前阶段来说两者在小规模调用差异基本是不大的,当前hibernate 用的就是ASM 方式实现的懒加载。
邹志全
2019/10/08
4580
Spring AOP
Spring AOP 面向切面编程,就是剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为“Aspect”,也就是切面。简单来说就是与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少代码量,降低模块间的耦合度,并有利于可操作性和可维护性。
故里
2020/11/25
3620
Spring:AOP
解决问题的困难:要抽取的代码在方法内部,靠以前把子类中的重复代码抽取到父类的方式没法解决。所以需要引入新的技术。
愷龍
2023/02/09
2900
细说Spring——AOP详解(AOP概览)
要理解切面编程,就需要先理解什么是切面。用刀把一个西瓜分成两瓣,切开的切口就是切面;炒菜,锅与炉子共同来完成炒菜,锅与炉子就是切面。web层级设计中,web层->网关层->服务层->数据层,每一层之间也是一个切面。编程中,对象与对象之间,方法与方法之间,模块与模块之间都是一个个切面。
全栈程序员站长
2022/09/18
5981
细说Spring——AOP详解(AOP概览)
Spring系列八:Spring AOP 和 AspectJ AOP 区别
今天由叶秋学长带领大家学习Spring AOP和AspectJ AOP 的区别~~
叶秋学长
2022/07/28
1.3K0
Spring系列八:Spring AOP 和 AspectJ AOP 区别
【小家Spring】Spring AOP的多种使用方式以及神一样的AspectJ-AOP使用介绍
AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。
YourBatman
2019/09/03
2.6K0
【小家Spring】Spring AOP的多种使用方式以及神一样的AspectJ-AOP使用介绍
Spring的AOP
写一个账户业务层模拟业务(基于xml配置) /** * 账户的业务层接口 * 这是一个新建的类 */ public interface AccountService { /** * 模拟保存账户 */ void saveAccount(); /** * 模拟更新账户 * @param i */ void updateAccount(int i); /** * 删除账户 * @retur
暴躁的程序猿
2022/03/23
2840
Spring的AOP
Spring AOP应用
最近新项目要启动,在搭建项目基础架构的时候,想要加入日志功能和执行性能监控的功能,想了很多的想法,最后还是想到用spring的aop功能,一是不需要写那么多的重复代码,二是灵活好用,好了现在就讲讲这个aop功能的使用。(需要的jar包:spring.jar、asm-2.2.3.jar、asm-commons-2.2.3.jar、aopalliance.jar、aspectjweaver.jar、cglib-nodep-2.1_3.jar,可以忽略版本号)
哲洛不闹
2018/09/19
5520
Spring AOP应用
Spring-Aop
程序执行过程中的某个特定的点,或者说特定的时候。比如类初始化的时候,方法调用的时候,异常处理的时候,在 Spring AOP 中,一个连接点总是表示一个方法执行的时候。
云扬四海
2019/06/05
4030

相似问题

使用Spring AOP介绍创建混入

27

Spring AOP不支持MVC

11

Spring AOP不支持@Configuration和@EnableAspectJAutoProxy

12

介绍Spring

35

@ AOP @PostConstruct Spring AOP ineterception

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档