首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring AOP。从JoinPoint获取bean名称

Spring AOP(Aspect-Oriented Programming)是Spring框架中的一个重要特性,它提供了一种通过横切关注点(cross-cutting concerns)来增强应用程序的能力。横切关注点是指在应用程序中多个模块中都会用到的功能,例如日志记录、事务管理、安全性等。

在Spring AOP中,通过定义切面(Aspect)来实现横切关注点的功能。切面是一个包含通知(Advice)和切点(Pointcut)的类,通知定义了在何时、何地执行横切关注点的逻辑,切点定义了在哪些连接点(JoinPoint)上应用通知。

JoinPoint是指在应用程序执行过程中可以插入切面逻辑的点,例如方法调用、方法执行、异常抛出等。通过JoinPoint可以获取到当前执行的方法、参数、目标对象等信息。

要从JoinPoint获取bean名称,可以使用以下代码:

代码语言:txt
复制
import org.aspectj.lang.JoinPoint;

public class MyAspect {
    public void before(JoinPoint joinPoint) {
        String beanName = joinPoint.getSignature().getDeclaringTypeName();
        System.out.println("当前执行的bean名称:" + beanName);
    }
}

在上述代码中,通过joinPoint.getSignature().getDeclaringTypeName()方法可以获取到当前执行方法所属的类的全限定名,即bean名称。

Spring AOP的应用场景包括但不限于:

  1. 日志记录:通过在方法执行前后插入切面逻辑,记录方法的调用信息和执行结果。
  2. 事务管理:通过在方法执行前后插入切面逻辑,实现对方法的事务管理,例如开启事务、提交事务、回滚事务等。
  3. 安全性:通过在方法执行前后插入切面逻辑,实现对方法的权限验证、身份认证等安全相关功能。

腾讯云提供了一系列与Spring AOP相关的产品和服务,例如:

  1. 云原生应用平台(Cloud Native Application Platform):提供了基于Kubernetes的容器化部署和管理平台,可用于部署和运行使用Spring AOP的应用程序。详细信息请参考:云原生应用平台产品介绍
  2. 云数据库 TencentDB for MySQL:提供了高可用、可扩展的MySQL数据库服务,可用于存储Spring AOP应用程序的数据。详细信息请参考:TencentDB for MySQL产品介绍
  3. 云函数(Serverless Cloud Function):提供了无服务器的函数计算服务,可用于部署和运行使用Spring AOP的函数。详细信息请参考:云函数产品介绍

以上是关于Spring AOP的完善且全面的答案,希望能对您有所帮助。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【小家Spring】探索Spring AOP中aopalliance的Joinpoint、MethodInvocation、Interceptor、MethodInterceptor...

前言 在这篇博文:【小家Spring】详解Spring AOP中底层代理模式之JdkDynamicAopProxy和CglibAopProxy(ObjenesisCglibAopProxy)的源码分析...拦截构造器 (Spring并没有提供实现类) JoinpointAOP运行时的连接点(顶层接口) Invocation:继承自Joinpoint。...Spring对核心的Method相关的拦截、执行器做了对应的实现。 注意,SpringAOP实现并不依赖于AspectJ任何类,它自己实现了一套AOP的。...比如它Spring自己提供的BeforeAdvice和AfterAdvice都是对AOP联盟规范的标准实现。...以及Spring自己抽象出来的对Advice的包装:org.springframework.aop.Advisor贯穿Spring AOP的始终 但是在当前注解驱动的流行下,基于POJO(xml方式

2.7K41

day34_Spring学习笔记_02

AspectJ是一个基于Java语言的AOP框架,Spring2.0开始,Spring AOP引入对Aspect的支持,AspectJ扩展了Java语言,提供了一个专门的编译器,在编译时提供横向代码的织入...编写代理:半自动 让spring 给我们创建代理对象,我们spring容器中手动的获取代理对象。...aop编程:全自动【掌握】 我们spring容器获得的就是目标类,如果我们配置了aopspring将自动生成代理对象。...throwing :通知方法的第二个参数名称                 通知/方法格式:public void myAfterThrowing(JoinPoint joinPoint, Throwable... joinPoint) {         System.out.println("我的最终通知");     } } 2.6.4、spring配置   bean.xml <?

43340

Spring AOP入门到进阶

Spring AOP入门到进阶 Running with Spring Boot v2.4.5, Spring v5.3.6 我们常常在核心业务逻辑中看到诸如事务管理、日志记录或性能统计等行为,这些行为的代码量一般也就几行...AOP究竟是如何获取与当前Bean匹配的Advisor列表了。...BeanFactory中获取所有Advisor列表; 获取的Advisor列表中进一步判断哪些Advisor是与当前Bean匹配的,剔除不匹配的; 在Advisor列表头部追加一个DefaultPointcutAdvisor...super.findCandidateAdvisors()核心实现 // 首先,当前BeanFactory中获取所有Advisor类的名称,生成advisorNames数组 String...aspectJAdvisorsBuilder.buildAspectJAdvisors()核心实现 // 首先,当前BeanFactory中获取所有Bean名称,最终获取到的beanNames数组数量达

34030

一篇文搞懂《AOP面向切面编程》是一种什么样的体验?

AOPspring中又叫“面向切面编程”,它可以说是对传统我们面向对象编程的一个补充,字面上顾名思义就可以知道,它的主要操作对象就是“切面”,所以我们就可以简单的理解它是贯穿于方法之中,在方法执行前...【全网最全】SSM开发必备依赖-Jar包、参考文档、常用配置 2、引入AOP名称空间 使用AOP切面编程时是需要在容器中引入AOP名称空间的, ?...4、JoinPoint获取方法信息 在这里我们就可以使用JoinPoint接口来获取到目标方法的信息,如方法的返回值、方法名、参数类型等。 ?...,这种声明是基于aop名称空间中的XML元素来完成的, 在bean配置文件中,所有的Spring AOP配置都必须定义在元素内部。...="logUtil" class="com.spring.utils.LogUtli"> <bean id="SecondUtli" class="com.spring.utils.SecondUtli

41610

Spring详解(六)------AspectJ 实现AOP

所以说在 spring AOP 的核心包 Spring-aop-3.2.jar 里面也有对 AspectJ 的支持。 2、切入点表达式   上一篇博客中,我们在spring配置文件中配置如下: <!...(了解) bean('userServiceId')  2、Aspect 通知类型    Aspect 通知类型,定义了类型名称以及方法格式。...; import org.aspectj.lang.JoinPoint; public class MyAspect { /** * JoinPoint获取目标方法的一些基本信息 *...,Spring 会自动选择cglib代理还是JDK动态代理 切入点 ,目标对象获得具体方法 特殊的切面,只有一个通知 和 一个切入点...通知方法第二个参数的名称 通知方法格式:public void myAfterReturning(JoinPoint joinPoint,Object ret){ 参数1:连接点描述

83260

Spring源码阅读系列之一:Spring AOP原理(上)

本文是Spring原理分析的第一篇博文,主要阐述Spring AOP相关概念,同时源码层面分析AOP实现原理。对于AOP原理的理解有利于加深对Spring框架的深入理解。...那么Spring AOP应该是在前两个步骤中起作用的,要么是在Bean定义时候,要么就是在获取Bean的时候进行的。如下图所示,我们希望通过debug的方式找到AOP在什么阶段开始起作用。...以下为寻找AOP起作用起点的过程,首先我们猜测Spring在处理AOP的时候是在获取bean的时候进行数据的织入的,所以在获取bean的时候进行断点跟踪。...在这个我们可以发现,Spring框架存放bean名称以及对应的对象的数据结构实际上是一个ConcurrentHashMap。...这就说明在获取bean的时候,对应的对象已经是被代理过的。所以实际数据织入并不是在获取bean的时候进行的,而是在bean加载到Spring环境中的时候就已经完成了。

16520

学习 Spring,看松哥这篇万余字的干货,够用了!

当然,大家在在公众号后台回复 Spring ,也可以获取本文电子版,回复 2TB 可以获取超 2TB 免费 Java 学习资源。 ” 1....如果能够将这些操作交给容器来管理,开发者就可以极大的对象的创建中解脱出来。 使用 Spring 之后,我们可以将对象的创建、初始化、销毁等操作交给 Spring 容器来管理。..."book"); System.out.println(book); } } 3.2 Bean获取 在上一小节中,我们通过 ctx.getBean 方法来 Spring...Spring 容器中多次获取同一个 Bean,默认情况下,获取到的实际上是同一个实例。...,service 中的方法一定要按照这里的名称规则来,否则事务配置不会生效 3.配置 Aop <aop:pointcut id="pc1" expression="execution

69620

spring动态注册bean会使AOP失效?

前言 本文的素材来自读者的一个问题,他看过我之前写的一篇博文聊聊如何把第三方服务注册到我们项目的spring容器中。...今天就来聊一下这个话题,为什么使用registerSingleton()注册的bean,无法使AOP生效 问题根源 registerSingleton()这个方法直接将bean存放到单例池里面了。...因此这个bean可能是会被增强的,其中当然包括经过AOP增强 而使用registerSingleton()相当于是直接走捷径,不经过后置处理器,一步到位直接存放到单例池中。...因为方案一完整经历过bean的生命周期,这就意味着可以获取spring提供的各种增强功能。方案二反而更像是硬编码进去,如果后面要使用spring的其他增强的功能,就还必须调用其他API。...不过如果可以确定业务不会使用spring提供的各种扩展功能。

75330

学Java的你还不会Spring?一篇文章带你掌握

Spring容器 在SpringIOC容器读取Bean配置创建Bean之前,必须对它进行实例化。只有在容器实例化后,才可以IOC容器里获取Bean实例并使用。...,其中id表示该Bean的唯一标识,class表示该Bean的全类名; 如何IOC容器中获取一个Bean 要想从IOC容器中获取一个Bean,常见的有两种方式: 通过id获取 通过类型获取 ApplicationContext...若IOC容器中有多个与目标Bean类型一致的Bean,在这种情况下,Spring将无法判定哪个Bean最适合该属性,所以不能执行自动装配 byName:根据名称自动装配。...@Qualifier注解里提供Bean名称Spring允许对方法的入参标注@Qualifier以指定注入Bean名称 @Autowired注解也可以应用在数组类型的属性上,此时Spring将会把所有匹配的...通过入参JoinPoint还能够获取到待执行的方法名和参数,如何获取看上面的代码就好了。

15510
领券