SPRING03_AOP的概述、动态代理、cglib代理、相关概念、基于xml配置、基于注解配置(五)

简介: SPRING03_AOP的概述、动态代理、cglib代理、相关概念、基于xml配置、基于注解配置(五)

⑦. 基于注解的AOP开发


  • ①. 注解通知的类型


微信图片_20220108214043.png


②. 切点表达式的抽取


@Pointcut:用于定义切入点表达式。在使用时还需要定义一个包含名字和任意参数的方法签名来表示切入点名称。实际上,这个方法签名就是一个返回值为void,且方法体为空的普通的方法


③. 基于注解的AOP


将业务逻辑组件和切面类都加入到容器中;告诉Spring哪个是切面类(@Aspect)


在切面类上的每一个通知方法上标注通知注解,告诉Spring何时可以运行(切入点表达式)


在配置文件中配置aop自动代理


开启基于注解的aop模式:@EnableApectJAutoProxy


④. 关于JointPoint必须放在方法的第一位参数中


方法 说明
joinpoint.getargs() 获取参数
joinPoint.getSignature().getName 获取方法的名称
joinpoint.getTarget() 获取目标方法
joinpoint.getThis() 获取代理对象


微信图片_20220108214129.png


public interface TargetInterface {
    public void save();
}


@Component
public class Target implements TargetInterface {
    public void save() {
        System.out.println("save running");
    }
}


//掌握
@Component("myAspect")
@Aspect//标志当前MyAspectAnnotation是一个切面类
public class MyAspectAnnotation {
    //定义切点表达式
    @Pointcut("execution(* com.xiaozhi.annotation.*.*(..))")
    public void pointCut(){}
    /*前置通知*/
    @Before(value="pointCut()")
    public void before(){
        System.out.println("前置增强");
    }
    /*后置通知*/
    @AfterReturning(value = "execution(* com.xiaozhi.annotation.*.*(..))")
    public void afterRetruning(){
        System.out.println("后置通知");
    }
    /*环绕通知
    ProceedingJoinPoint:正在执行的连接点[切点]
     */
    @Around("MyAspectAnnotation.pointCut()")
    public Object around(ProceedingJoinPoint pjp) throws Throwable {
        System.out.println("环绕前增强...");
        //切点方法
        Object proceed=pjp.proceed();
        System.out.println("环绕后增强...");
        return proceed;
    }
}


掌握
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context.xsd
                           http://www.springframework.org/schema/aop
                           http://www.springframework.org/schema/aop/spring-aop.xsd">
    <!--组件扫描-->
    <context:component-scan base-package="com.xiaozhi.annotation"/>
    <!--启动基于注解的声明式AspectJ支持-->
    <aop:aspectj-autoproxy/>
</beans>


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(value = {"classpath:applicationContext-annotation.xml"})
public class AnnotationTest {
    @Autowired
    private TargetInterface target;
    @Test
    public void test1(){
        target.save();
    }
}
相关文章
|
10月前
|
XML 安全 Java
使用 Spring 的 @Aspect 和 @Pointcut 注解简化面向方面的编程 (AOP)
面向方面编程(AOP)通过分离横切关注点,如日志、安全和事务,提升代码模块化与可维护性。Spring 提供了对 AOP 的强大支持,核心注解 `@Aspect` 和 `@Pointcut` 使得定义切面与切入点变得简洁直观。`@Aspect` 标记切面类,集中处理通用逻辑;`@Pointcut` 则通过表达式定义通知的应用位置,提高代码可读性与复用性。二者结合,使开发者能清晰划分业务逻辑与辅助功能,简化维护并提升系统灵活性。Spring AOP 借助代理机制实现运行时织入,与 Spring 容器无缝集成,支持依赖注入与声明式配置,是构建清晰、高内聚应用的理想选择。
854 0
|
Java API 数据安全/隐私保护
(工作经验)优雅实现接口权限校验控制:基于自定义注解、AOP与@ConditionalOnProperty配置开关的通用解决方案
(工作经验)优雅实现接口权限校验控制:基于自定义注解、AOP与@ConditionalOnProperty配置开关的通用解决方案
818 1
|
存储 缓存 Java
Spring高手之路23——AOP触发机制与代理逻辑的执行
本篇文章深入解析了Spring AOP代理的触发机制和执行流程,从源码角度详细讲解了Bean如何被AOP代理,包括代理对象的创建、配置与执行逻辑,帮助读者全面掌握Spring AOP的核心技术。
471 3
Spring高手之路23——AOP触发机制与代理逻辑的执行
|
XML Java 数据格式
使用完全注解的方式进行AOP功能实现(@Aspect+@Configuration+@EnableAspectJAutoProxy+@ComponentScan)
本文介绍了如何使用Spring框架的注解方式实现AOP(面向切面编程)。当目标对象没有实现接口时,Spring会自动采用CGLIB库进行动态代理。文中详细解释了常用的AOP注解,如`@Aspect`、`@Pointcut`、`@Before`等,并提供了完整的示例代码,包括业务逻辑类`User`、配置类`SpringConfiguration`、切面类`LoggingAspect`以及测试类`TestAnnotationConfig`。通过这些示例,展示了如何在方法执行前后添加日志记录等切面逻辑。
1579 2
使用完全注解的方式进行AOP功能实现(@Aspect+@Configuration+@EnableAspectJAutoProxy+@ComponentScan)
|
设计模式 Java 测试技术
spring复习04,静态代理动态代理,AOP
这篇文章讲解了Java代理模式的相关知识,包括静态代理和动态代理(JDK动态代理和CGLIB),以及AOP(面向切面编程)的概念和在Spring框架中的应用。文章还提供了详细的示例代码,演示了如何使用Spring AOP进行方法增强和代理对象的创建。
spring复习04,静态代理动态代理,AOP
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
468 1
|
Java 数据库连接 数据库
让星星⭐月亮告诉你,SSH框架01、Spring概述
Spring是一个轻量级的Java开发框架,旨在简化企业级应用开发。它通过IoC(控制反转)和DI(依赖注入)降低组件间的耦合度,支持AOP(面向切面编程),简化事务管理和数据库操作,并能与多种第三方框架无缝集成,提供灵活的Web层支持,是开发高性能应用的理想选择。
255 1
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
876 2
|
Java Spring
SSM-Spring-10:Spring中cglib动态代理
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------   何为动态代理,就不扯皮了,上一篇博客刚刚提到,那cglib动态代理又怎么写,我拿个和上个例子相似的案例来写   具体案例:   一个SomeServiceImpl接口 package cn.
1282 0

热门文章

最新文章