spring-210728-01---AOP-AspectJ注解

spring-210730-03---Spring5新功能-Webflux-响应式编程-Reactor实现&操作符 spring-210730-03—Spring5新功能-Webflux-响应式编程-Reactor实现&操作符 Reactor有两个核心类,Mono和Flux 操作符 Reactor演示 引入依赖 TestReactor.java Reactor有两个核心类,Mono和Flux 响应式编程操作中,Reactor是满足Reactive规范框架。 Reactor有两个核心类,Mono和Flux,这两个类实现了接口Publisher,提供了丰富的操作符。 1) Flux对 阅读详情

spring-210728-01—AOP-AspectJ注解


创建User类,在类里面定义方法add()
创建增强类,UserProxy类
进行通知的配置
	1. 配置Spring文件,开启注解扫描
	2. 使用注解创建User和UserProxy
	3. 在增强类上面添加注解@Aspect
	4. 配置Spring文件,开启生成代理对象
配置不同的通知类型

演示

User.java

package com.bgy.spring.aoptest;

import org.springframework.stereotype.Component;

// 被增强的类
@Component
public class User {

    public void add(){

        // 测试有异常的情况
//        int a = 10/0;

        System.out.println("user  add.............");
    }
}

UserProxy.java

package com.bgy.spring.aoptest;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

// 增强的类
@Component
@Aspect     // 生成代理对象
public class UserProxy {

    // 前置通知
    // 注解@Before 表示作为前置通知
    @Before(value = "execution(* com.bgy.spring.aoptest.User.add(..))")
    public void before(){
        System.out.println("before..........");
    }

    // 最终通知
    // 不管有没有异常,都会执行
    @After(value = "execution(* com.bgy.spring.aoptest.User.add(..))")
    public void after(){
        System.out.println("after.............");
    }

    // 后置通知
    // 如果有异常就不执行了
    @AfterReturning(value = "execution(* com.bgy.spring.aoptest.User.add(..))")
    public void afterReturning(){
        System.out.println("afterReturning.............");
    }

    // 异常通知
    @AfterThrowing(value = "execution(* com.bgy.spring.aoptest.User.add(..))")
    public void afterThrowing(){
        System.out.println("afterThrowing.............");
    }

    // 环绕通知
    @Around(value = "execution(* com.bgy.spring.aoptest.User.add(..))")
    public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        System.out.println("around   环绕之前.............");

        // 被增强的方法
        proceedingJoinPoint.proceed();

        System.out.println("around   环绕之后.............");
    }
}

bean01.xml

需要引入名称空间:
	xmlns:aop="http://www.springframework.org/schema/aop"
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       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.bgy.spring.aoptest"></context:component-scan>

    <!--
        开启Aspect生成代理对象
        意思就是只要类上面有注解@Aspect,就生成代理对象。
    -->
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>

TestAop.java

import com.bgy.spring.aoptest.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestAop {

    @Test
    public void test(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean01.xml");

        User user = context.getBean("user", User.class);

        user.add();
    }
}
// 没有异常的情况,运行结果:
//        around   环绕之前.............
//        before..........
//        user  add.............
//        around   环绕之后.............
//        after.............
//        afterReturning.............

//有异常的运行情况:
//        around   环绕之前.............
//        before..........
//        after.............
//        afterThrowing.............
spring-210729-03---Spring5新功能-整合JUnit5单元测试 spring-210729-03—Spring5新功能-整合JUnit5单元测试 测试Junit4 测试Junit5 Spring5支持整合JUnit5 第一步:引入Spring相关的依赖 第二步:创建测试类,使用注解方式完成 测试Junit4 TestJunit4.java import com.bgy.spring.service.UserService02; import org.junit.Test; import org.junit.runner.RunWith; import o 阅读详情

相关推荐

数字图像处理基础实验(二):直方图均衡化

一、实验内容及原理 1、计算灰度图像的归一化直方图 具体内容:利用 OpenCV 对图像像素进行操作,计算归一化直方图.并在 窗口中以图形的方式显示出来 步骤: (1)初始化一个256大小的数组,存放图像中每级灰度值的像素点的个数 (2)遍历整张图像 (3)归一化数组 2、灰度图像直方图均衡处理 具体内容:通过计算归一化直方图,设计算法实现直方图均衡化处理。 步骤: (1)读取该像素点的灰度值 (...

lyd1995的博客 4526

spring-210728-02---AOP-AspectJ注解-抽取相同切入点&设置优先级

spring-210728-02—AOP-AspectJ注解-抽取相同切入点&设置优先级 相同切入点抽取 UserProxy02.java 多个增强类,同一个方法进行增强,设置增强类优先级 演示 Person.java PersonProxy01.java PersonProxy02.java bean01.xml TestPerson.java 相同切入点抽取 UserProxy02.java package com.bgy.spring.aoptest; import org

白光一的博客 571

AppFlow实战:零代码将Dify接入企业微信的完整指南

本文提供了一份零代码将Dify AI应用接入企业微信的完整实战指南。通过使用阿里云AppFlow作为无代码连接器,详细讲解了从获取Dify API密钥、创建企业微信应用到配置自动化流程的全过程,帮助团队快速将AI能力无缝融入日常协作,大幅提升工作效率。

php55的博客 808

spring-210730-02---Spring5新功能-Webflux-响应式编程-Java实现

spring-210730-02—Spring5新功能-Webflux-响应式编程-Java实现 什么是响应式编程 观察者模式(演示) ObserverTest.java 尚硅谷视频给的例子 Flow.java Main.java 什么是响应式编程 什么是响应式编程: 简称RP(Reactive Programming) 响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流, 而相关的计算模型会自动将变化的值通过数据流进行传播。 例

白光一的博客 404

Gemini 3.1 Flash本地部署实操:Ollama+Open WebUI零门槛运行指南

大型语言模型(LLM)本地运行是指将模型权重下载至本地设备,通过推理引擎完成离线推理的过程;其核心原理依赖量化压缩(如GGUF格式)与轻量级运行时(如Ollama)实现CPU/GPU高效加载;技术价值在于低延迟响应、数据隐私可控及免网络依赖;典型应用场景包括办公提效(邮件/周报生成)、学生学习辅助、产品原型验证等边缘AI任务;本文聚焦Gemini 3.1 Flash这一面向消费级硬件优化的轻量模型变体,结合Ollama模型管理与Open WebUI图形界面,提供从环境准备、模型拉取到流式对话的完整新手实操路

weixin_32238157的博客 494

华为OD机考双机位C卷 - 员工派遣 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 员工派遣 (OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 1035

spring-210728-03---JdbcTemplate操作数据库-查询功能

spring-210728-03—JdbcTemplate操作数据库-查询功能 演示 UserDao.java(dao层接口) UserDaoImpl.java(这里实现DQL操作) UserService.java(这里调用dao) TestUser01.java(测试) bean01.xml(Spring配置文件) User.java(实体类) 演示 UserDao02.java(dao层接口) package com.bgy.spring.dao; import com.bgy.spring.e

白光一的博客 369

Python + Playwright:集成 Applitools 进行视觉回归测试(快速入门)

Applitools是一款基于人工智能的视觉验证测试工具,专门用于自动化和验证应用程序的用户界面(UI);Applitools使用视觉回归测试来检测应用程序界面的变化,确保 UI 在不同版本之间的一致性;Applitools的核心功能是通过视觉比较,检测 UI 元素的差异,而无需手动编写复杂的界面检查代码;通过集成Applitools,测试人员可以轻松捕捉和验证界面中的视觉差异,无论是在Web移动端或桌面应用的测试环境;

blues_C的博客 2921

spring-210724-04--IOC容器--Bean管理XML方式-注入空值和特殊符号

spring-210724-04–IOC容器–Bean管理XML方式-注入空值和特殊符号 beantest21072401.xml(笔记在注释中哦) TestBean21072401.java beantest21072401.xml(笔记在注释中哦) <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="h

白光一的博客 319

手把手打通全流程:在华为昇腾310/Atlas 200DK上实现深度学习模型从移植到部署

通过以上步骤,你已成功在华为昇腾310 Atlas 200DK上完成深度学习模型的移植与推理。这一流程可复用到目标检测、语义分割等其他任务,快去尝试将自己的AI模型部署到昇腾设备上,打造属于你的边缘智能应用吧!上部署深度学习模型,这篇教程将带你走完从模型转换到推理运行的完整流程。无需担心技术壁垒,我们以通俗易懂的方式拆解每一步,让你轻松在昇腾嵌入式设备上实现AI应用。是专为边缘AI设计的高性能处理器,Atlas 200DK是其开发板形态,能高效运行图像分类、目标检测等深度学习任务。

FJN110的博客 183

S7-1200与ABB机器人进行SOCKET通信的具体方法示例

S7-1200与ABB机器人进行SOCKET通信的具体方法示例

Robot_PLC_HMI_Automation 3296

spring-210724-01--IOC容器--Bean管理XML方式-创建对象和set注入属性

spring-210724-01–IOC容器–Bean管理XML方式-创建对象和set注入属性 IOC操作Bean管理(概念) IOC操作Bean管理(基于xml方式) 基于xml方式创建对象 基于xml方式注入属性 set方法注入步骤 测试代码 Book.java bean1.xml TestSpring5.java IOC操作Bean管理(概念) 1. Bean管理就是指两个操作 1)Spring创建对象 2)Spring注入属性 2. Bean管理操作 1)基于xml配置

白光一的博客 313

麒麟系统无法进入单用户模式该怎么办?

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 备注:部分问题/疑难杂症搜集于互联网。

**My Coding Family** 1820

spring-210729-02---Spring5新功能-Nullable注解&函数式注册对象

spring-210729-02—Spring5新功能-Nullable注解&函数式注册对象 演示支持函数式风格 User.java TestUser04.java Spring5框架核心容器支持@Nullable注解 @Nullable可以使用在方法、属性、参数上面, 表示方法返回值可以为空、属性值可以为空、参数值可以为空 Spring5框架核心容器支持函数式风格GenericApplicationContext/AnnotationConfigApplicationContext

白光一的博客 293

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

spring-210727-06--IOC容器--Bean管理注解方式-注入属性@Resource&@Value

spring-210727-06–IOC容器–Bean管理注解方式-注入属性@Resource&@Value 演示@Resource UserDao03.java(@Resource) UserDaoImpl03.java(@Resource) UserService03.java(@Resource) UserService04(@Value) userbean.xml TestUser03.java @Autowired: 根据属性类型进行自动注入 @Qualifier: 根据属性名称进行

白光一的博客 278

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

spring-210730-01---Spring5新功能-Webflux-基本概念

spring-210730-01—Spring5新功能-Webflux-基本概念 SpringWebFlux介绍 异步非阻塞解释 WebFlux特点 比较SpringMVC SpringWebFlux介绍 WebFlux官方文档说明地址: https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html SpringWebFlux介绍: 1)是Spring5中新添加的模块,用于web开发,功

白光一的博客 248

spring-210724-09--IOC容器--Bean管理-作用域(设置单&多实例)

spring-210724-09–IOC容器–Bean管理-作用域(设置单&多实例) scope概念 Courses.java scopebean.xml(设置scope) TestScope.java scope概念 在Spring 中配置文件bean标签里面有一个属性(scope)用于设置单实例,还是多实例 scope属性: singleton:默认值,表示单实例对象 prototype:表示多实例对象 singleton和prototype的区别: 设置singleton:

白光一的博客 240

spring-210724-08--IOC容器--Bean管理-工厂bean

spring-210724-08–IOC容器–Bean管理-工厂bean 工厂bean(FactoryBean) MyFactoryBean.java(实现FactoryBean接口) myfactorybean.xml TestFactoryBean.java 工厂bean(FactoryBean) Spring 中有两种类型的bean,一种是普通bean,一种是工厂bean(FactoryBean) 普通bean: 配置文件中定义bean的类型就是返回类型。 工厂bean: 在配置文件中定义

白光一的博客 231

spring-210729-01---Spring5新功能-整合日志框架

spring-210729-01—Spring5新功能-整合日志框架 log4j2.xml 日志手动输出 Spring5新功能特性地址:https://www.cntofu.com/book/95/33-what-new-in-the-spring-framework.md 特点: 整个Spring5框架基于Java8, 运行时兼容JDK9, 许多不建议使用的类和方法在代码库中删除 Spring 5.0框架自带了通用的日志封装 Spring5已经移除了Log4jConfigListe

白光一的博客 225

spring-210727-07--IOC容器--Bean管理注解方式-完全注解开发

spring-210727-07–IOC容器–Bean管理注解方式-完全注解开发 SpringConfig.java TestUser04.java 创建配置类,替代xml配置文件 SpringConfig.java package com.bgy.spring.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Con

白光一的博客 212

spring-210727-01---AOP-基本概念&底层原理

spring-210727-01—AOP-基本概念&底层原理 什么是AOP 底层原理 什么是AOP AOP为Aspect Oriented Programming的缩写,意为:面向切面编程。 通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。 AOP是OOP的延续,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 不通过修改源代码的

白光一的博客 211

实际工程问题:AI 生成 Spring Cache(@Cacheable / @CachePut / @CacheEvict)缓存注解踩坑

商品详情服务,要求:商品基础信息走缓存,减少 DB 查询;典型:AI 只贴注解,忽略 AOP 代理、key 设计、缓存穿透/击穿/过期、序列化、同步刷新,本地单测正常,上线后缓存脏数据、命中率异常、雪崩。如果业务在事务中,@CacheEvict / @CachePut 如果在事务提交前执行,一旦事务回滚,缓存已经被删掉/更新,数据不一致。• 如果在同一个类里用 this.xxx() 调用带缓存注解的方法,不走代理,缓存直接失效;// 更新商品:先更新 DB,再删除缓存,而不是直接 @CachePut。

2401_89363342的博客 481

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 349

MCP 2026-07-28 无状态协议大改版:Spring AI 2.1 多轮往返请求与网关路由落地

无状态,所以任何实例都能处理任何请求,扩容不再需要粘性会话;显式句柄,所以跨调用状态是可审计、可过期的,而不是藏在进程内存里;幂等重放,所以交互式中断在分布式环境下也可恢复,代价是你要自己保证副作用可对账;头部路由,所以网关能在不解析 body 的前提下做治理,而校验 header/body 一致性成了新的安全底线。这些没有一个是在发明新概念。它们是分布式系统里被验证过二十年的老手艺:无状态、显式上下文、幂等、网关治理、fail-fast、可观测。

qq_36021478的博客 154

SpringBoot 新闻推荐系统:88个Java文件105个接口,首页推荐位是后端按点击数排出来的

# SpringBoot 新闻推荐系统:88个Java文件105个接口,首页推荐位是后端按点击数排出来的 > 这是一套基于 Spring Boot 的新闻推荐系统源码,配套 `db.sql` 建表脚本,业务覆盖新闻发布、排行榜管理、评论回复、点赞点踩、收藏夹和轮播图配置。形态是**前后台双端**:前台是读者用的 layui 静态站,后台是管理员用的 Vue 单页应用(编译产物已嵌在工程里)。最值

面朝大海 255

模型“看不见”中间的东西——prompt cache 与 Zone 分区

本文揭示了LLM系统中promptcache失效的根源:动态内容错置于系统提示词前缀,导致缓存命中率从80%骤降至4%。核心教训是“变化内容必须排在最后”——通过Zone分区(ZoneA稳定区、ZoneB动态区),将每轮可能变化的内容移至末尾,可确保前缀稳定,恢复高命中率。关键在于:前缀匹配要求逐字节相同,任何一处变动即导致后续全部失效。修复建议包括:重构提示词结构、正确分类内容、监控缓存单位(字节与token不可混用)、避免压缩破坏前缀。最终实现成本降低9倍,提升推理效率。

qinglongcn的博客 188
上一篇: spring-210727-04---AOP-AspectJ准备
下一篇: spring-210728-02---AOP-AspectJ注解-抽取相同切入点&设置优先级
白光一
博客等级 码龄9年 0粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值