spring AOP 基于注解(spring版本4.2.0)

Spring使用注解配置时异常信息报错之spring-aop-4.0.0.RELEASE.jar包下载方式 异常报错以及解决方法 一:简介 当我使用配置文件配置Bean时,导入如下图所示的八个jar包完全足够,但当我使用注解配置是,却出现了异常 异常信息如下 一月 14, 2019 11:46:35 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh 信息: Refreshing o... 阅读详情

spring AOP 概念

点击打开链接

spring AOP 如何获取目标方法的参数,如何在目标方法执行前,修改目标方法的参数。如何在目标方法执行后,修改目标方法的返回结果。

点击打开链接

spring AOP 基于注解的实现

需要依赖的jar
aopalliance-1.0.jar,aspectjrt-1.8.7.jar,cglib-nodep-3.2.0.jar,aspectjweaver-1.8.7.jar

被代理类

package com.sky.lp.AAtestAop;

import org.springframework.stereotype.Component;

@Component
public class Human implements Sleepable{

    @Override
    public String sleep(String str) {
        System.out.println("睡觉了!梦中自有颜如玉!");
        return str + "+lp";
//      throw new RuntimeException("被代理类抛错");
    }

}

被代理类实现的接口

package com.sky.lp.AAtestAop;

public interface Sleepable {

    public String sleep(String str);

}

切面

package com.sky.lp.AAtestAop;

import java.util.Date;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class SleepHelper {

    //切点
    @Pointcut("execution(* com.sky.lp.AAtestAop.Human.*(..))")
    public void sleeppoint() {
    }

    //环绕通知
    @Around("sleeppoint()")
    public Object around(ProceedingJoinPoint pjp) throws Throwable {
        System.out.println("进入around通知" + new Date().getTime());
        Object object = pjp.proceed();// 执行目标方法
        System.out.println("退出around通知" + new Date().getTime());
        return object;
    }

    //前置通知
    @Before("sleeppoint()")
    public void before() {
        System.out.println("这里是Before通知" + new Date().getTime());
    }
    //在连接点正常执行完成后执行,如果连接点抛出异常,则不会执行
    @AfterReturning("sleeppoint()")
    public void afterReturning() {
        System.out.println("这里是afterReturning通知" + new Date().getTime());
    }
    //在连接点抛出异常后执行,不抛出异常则不执行
    @AfterThrowing("sleeppoint()")
    public void afterThrowing() {
        System.out.println("这里是afterThrowing通知" + new Date().getTime());
    }

    //在连接点执行完成后执行,不管是正常执行完成,还是抛出异常,都会执行返回通知中的内容
    @After("sleeppoint()")
    public void after() {
        System.out.println("这里是After通知" + new Date().getTime());
    }

}

测试类

package com.sky.lp.AAtestAop;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

    public static void main(String[] args) {
        ApplicationContext appCtx = new ClassPathXmlApplicationContext("spring-servlet.xml");
        Sleepable sleeper = (Sleepable)appCtx.getBean("human");
        String str = sleeper.sleep("lp");
        System.out.println("结果:" + str);
    }

}

测试类运行结果
进入around通知1447752935590
这里是Before通知1447752935590
睡觉了!梦中自有颜如玉!
退出around通知1447752935590
这里是After通知1447752935590
这里是afterReturning通知1447752935590
结果:lp+lp

spring-servlet.xml 配置

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-3.0.xsd
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
        http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
        http://www.springframework.org/schema/util 
      http://www.springframework.org/schema/util/spring-util-3.0.xsd">

    <!-- 启动包扫描功能,以便注册带有@Controller、@Service、@repository、@Component等注解的类成为spring的bean -->
    <context:annotation-config />
    <context:component-scan base-package="com.sky.lp.AAtestAop" />

    <!--    <aop:aspectj-autoproxy proxy-target-class="true "/> -->
<!-- proxy-target-class 默认值为 false,设置为 true 意思是 强制使用 CGLIB 动态代理 -->
<!-- 如果不指定 proxy-target-class ,spring会根据 被代理类 是否实现了接口 进行判断   使用jdk动态代理还是使用CGLIB动态代理。 -->
<!-- 如果 被代理类实现了 接口,则使用JDK动态代理,如果没有实现接口,则使用CGLIB动态代理。 -->
    <aop:aspectj-autoproxy/>

</beans>
深入掌握基于注解的Spring AOP实现 面向切面编程(AOP)是软件开发中的一个重要概念,它允许开发者将横切关注点(cross-cutting concerns)从业务逻辑中分离出来,以便在系统的多个部分中复用。这些横切关注点包括日志记录、事务管理、安全性和缓存等。面向切面编程(AOP)是一种编程范式,它允许开发者将横切关注点(如日志、事务管理等)与业务逻辑分离。在Spring框架中,AOP主要用于将业务逻辑中散布在多个点的公共行为(如安全、事务等)模块化,以减少代码重复,提高模块的内聚性。 阅读详情

相关推荐

spring.net结合三层AOP异常日志记录功能

spring.net结合三层AOP异常日志记录功能

Spring 4.2.0源码 导入 IDEA 流程 以及碰到的一些坑

第一次部署Spring 源码进入IDEA 真的是碰壁一大堆,所以写下一个流程,供读者学习。 流程 下载Spring 源码 观察部分文件,下载Gradle 正式部署项目 1、下载源码 可以在GitHub上直接选择自己喜欢的版本进行下载 点击跳转.(已经下载有的就忽略以下) 进入GitHub页面之后,左边有一个 “ Compare ” 点击选择自己想要下载的版本。 然后会进入一个新的页面,再点击新页...

love309516005的博客 652

spring-aop.jar各个版本

内容包括: spring-aop-1.1.1.jar spring-aop-1.2.6.jar spring-aop-1.2.9.jar spring-aop-2.0.2.jar spring-aop-2.0.6.jar spring-aop-2.0.7.jar spring-aop-2.0.8.jar spring-aop-2.0.jar spring-aop-2.5.1.jar spring-aop-2.5.2.jar spring-aop-2.5.4.jar spring-aop-2.5.5.jar spring-aop-2.5.6.jar spring-aop-3.0.0.RELEASE.jar spring-aop-3.0.2.RELEASE.jar spring-aop-sources.jar

Spring aop的简化版本

Spring aop的简化

weixin_58276266的博客 337

spring-framework-4.2.0.RELEASE-dist.zip

spring-framework-4.2.0.RELEASE-dist.zip spirng 最新 完整包 包含源码 更新时间:2015-8-10 22:33:31 同时更新的还有: 最新struts2: 最新hibernate:http://download.csdn.net/detail/angel_he/8987791

Spring-framework-4.2.0正式版下载

spring framework 4.2.0正式稳定版,鉴于spring官网下载比较麻烦,应此供初学者下载,该压缩包有完整代码和完整文档以及项目部署时使用的jar包

Spring.NET教程(十三)AOP的概念(基础篇)

上篇我们简单的了解了AOP的应用场景,知道AOP编程的重要性。这篇我们先看一段代码,来开始今天的学习。&#13; 回顾与上篇类似的代码:SecurityService类的IsPass判断用户名为“admin”则有权限保存数据。OrderService为保存数据的类,实现IOrderService接口。&#13; public class SecurityService&#13; {...

lzhdim的专栏 354

spring 4.2.0完整jar

spring 4.2.0完整包下载,包含Spring 4.2.0所有包,导入即可用。

Spring.net--AOP

引言  AOP的意思是面向方面编程,英文全称是Aspect Oriented Programming,它的作用是讲彼此先和在一起的功能分离开,简单来说就是解耦和。 AOP的原理: 我们编写应用程序时,通常包含两种代码:一种是和业务系统有关的代码,一是和业务系统关系不大的代码,例如日志、权限、异常处理、事务处理等。以前编写代码时,这两种代码基本是写在一起的,这样在程序中,到处充满着相同或类似的

邱慕夏 没有比脚更长的路,没有比人更高的山 2200

spring4.2.0官方文档

spring官方文档有文档和API(英文版)。有html版和pdf等

yolov8的Detect层详解(输出维度改动)

对于部署端需要拿到onnx的output进行后处理,但是基于anchor_free的yolov8输出是1*(4+cls)*8400,不是我们常见的ncwh格式,所以对Detect层进行了学习,分享一下体会。

yjcccccc的博客 2万+

翻一翻spring历史版本

Spring 0.9 版本,有记录的第一个版本Changes in version 0.9 (25.6.2003) ---------------------------------- * first public release since the version that came with the book "Expert One-on-One J2EE Design and Develop...

sunning9001的专栏 1939

Labview数据存储与读取——TDMS文件的创建与写入

Labview数据存储与读取——TDMS文件的创建与写入 你好,这是我在自学Labview编写软件过程中使用的一些功能。我在存储采集卡数据时,通过阅读大量他人的程序,发现TDM及TDMS文件十分适合波形数据的记录,TDMS文件比TDM文件在存储动态类型数据时读写速度更快,而且TDMS 文件没有容量限制,适合存储数据量庞大的测试数据。 前言少叙,书归正传 这一篇博客,说明一下如何使用基本的TDMS功能实现数据文件的存储。 所需要的控件如上图所示,在程序框图——编程——文件I\O——TDMS 中,写入TDMS

滑板小帅程序开发 2万+

Spring对Bean基于注解的装配时提示时提示The prefix "context" for element "context:component-scan" is not bound.

ch1项目结构目录如下: 配置文件报错: 解决办法: 配置文件缺少属性说明,标签内添加以下文字: xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springfr...

海天与晨钟 4499

用Python玩转Milvus:从安装SDK到完成第一个向量搜索Demo

本文为Python开发者提供了一份详细的Milvus向量数据库实战指南。文章重点讲解了如何规避版本兼容性陷阱,正确部署Milvus服务端并安装匹配的Python SDK。通过一个电影推荐系统的完整案例,演示了从数据建模、集合创建、向量插入、索引构建到执行混合搜索的全流程,帮助开发者快速上手并完成第一个向量搜索Demo。

weixin_29239279的博客 192

三极管开关电路在脉冲应用中的性能瓶颈分析

深入探讨三极管开关电路在高频脉冲场景下的响应延迟与功耗问题,揭示其性能限制的关键因素。结合实际应用,分析开关速度与信号完整性之间的矛盾,为优化三极管开关电路设计提供实用参考。

weixin_42602368的博客 588

Spring Framework 2.0 RC2(Release Candidate 2)于2006年10月发布

- **侵入性强**:Bean 类需添加 Spring 特定注解(如 `@Autowired`、`@Component`),违反“POJO 纯净性”原则,降低框架可移植性(如切换到 Guice 或 Micronaut 需大量改造)。 - **配置与逻辑耦合**:依赖声明混入业务类源码,可能干扰关注点分离;某些团队认为“配置应集中管理”,便于审计与环境差异化(如 dev/test/prod 的 Bean 替换)。

[Blog][Domain] programb.blog.youkuaiyun.com 500

实战落地!Python抓取股票历史数据:开盘/收盘/成交量全维度爬取(附数据清洗+可视化)

股票历史数据抓取的核心是“数据准确性+完整性”,网页爬取适合小批量、个性化需求,API调用适合批量、标准化需求。多市场数据抓取:适配港股(00700.HK)、美股(AAPL)的抓取逻辑;高频数据抓取:抓取分钟级、小时级行情数据,用于短线量化策略;财务数据扩展:抓取市盈率、市净率、净利润等财务指标,结合价格数据做基本面分析;量化策略回测:将清洗后的数据接入Backtrader、VNPY等量化框架,验证策略有效性。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1740

Spring基于注解开发异常

基于注解开发: 一开始:用的jar包: 百度查到: 导入aop包: 没用 有的说: Spring版本和jdk版本不匹配 于是我换成了4.0版本 导入的jar包: 还是报错。 解决办法:添加spring-aop-4.0.2.RELEASE.jar 终于问题解决。 转载于:...

weixin_30876945的博客 136

华为OD机考双机位C卷 - 朋友圈个数(Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 朋友圈个数(OD上机考试双机位C卷)。提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 695

树莓派 5 AI 套件(Hailo)示例

该用户自定义类作为输入传递给回调函数,该函数在管道输出上运行。它用于主程序与回调函数之间的通信。它对 hailo_rpi_common::app_callback_class 进行了扩展,并可根据应用程序的具体情况定制附加变量和方法。

机器人控制与仿真应用 4117

spring 4.0 AOP (使用AspectJ的注解方式 的aop实现)简单实例

AspectJ:Java 社区里最完整最流行的 AOP 框架. spring aop 配合使用aspectj(AOP框架)实现我们所需的aop功能 在 Spring 中启用 AspectJ 注解支持 必须在 classpath 下包含 AspectJ 类库: aopalliance.jar、aspectj.weaver.jar 和 spring-aspects.jar

qq_34360219的博客 547

【OpenClaw企业级智能体实战】第04篇:OpenClaw成本优化实战——Token消耗降96%!claude-mem+OpenViking从入门到精通

OpenClaw作为企业级智能体框架,凭借强大的自动化能力成为企业数字化转型的热门工具,但原生机制导致的上下文冗余问题,让众多用户面临“Token消耗失控”的困境——单周账单数千元的案例屡见不鲜。本文基于阿里云实测数据与开源工具官方文档,先深度拆解OpenClaw成本黑洞的核心成因(记忆碎片化、Token指数级膨胀),再系统讲解两款核心优化工具(claude-mem单Agent记忆管理、OpenViking多Agent集群底座)的底层原理、算法架构与实现逻辑,提供从环境搭建、工具集成、参数调优到安全部署

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 707

注解、原生Spring、SchemaBased三种方式实现AOP【附详细案例】

使用注解、原生Spring、SchemaBased三种方法实现AOP

qq_53317005的博客 4847

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

spring中aop的注解实现方式

注解方式实现aop我们主要分为如下几个步骤 1.在切面类(为切点服务的类)前用@Aspect注释修饰,声明为一个切面类。 2.用@Pointcut注释声明一个切点,目的是为了告诉切面,谁是它的服务对象。(此注释修饰的方法的方法体为空,不需要写功能比如 public void say(){};就可以了,方法名可以被候命的具体服务功能所以引用,它可以被理解为切点对象的一个代理对象方法) 3.在对应的方...

wujian_csdn_csdn的博客 5571

lwip-2.0.3

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

上一篇: java JDK 动态代理(如何使用,以及工作原理解析)
下一篇: Spring事务传播特性实例解析(以及如何使用注解形式事务)
三易的博客
博客等级 码龄15年 42粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值