Spring Framework(4)-AOP总结

全面掌握Spring Framework 4.3.4及其所有jar包 本文还有配套的精品资源,点击获取 简介:Spring Framework 4.3.4是一个关键版本,属于Spring框架的4.x系列,提供了许多改进和更新。本文深入探讨了依赖注入、AOP、Spring MVC、数据访问、注解驱动开发、WebSocket支持、类型安全配置、性能优化以及兼容性和稳定性等关键知识点,并强调了这些特性在实际开发中的重要性。通过使用Spring Fr... 阅读详情

 点击查看Spring系列文章

目录

一.什么是AOP

1.AOP的作用

2.AOP的本质是什么

3.三种动态代理的实现本质是什么

二.Spring AOP的配置和使用过程

1.基于xml配置文件的使用

1.AOP核心概念

2.Spring对AOP的支持

3.代码实现

2.基于注解配置的使用

1.applicationContext.xml

2.TargetClass

3.ProxyClass

4.TestAOP

输出分析

三.JDK动态代理和CGLIB动态代理的使用


 

一.什么是AOP

AOP即Aspect Oriented Programming,面向切面编程,它是相对于OOP(Object Oriented Programming)面向对象编程的另一种编程思想,它旨在抽离出代码的公共部分,就像一个切面一样,横切在许多代码中,使得所有的代码都可以执行到这个切面的公共代码,而不必要为一个需要它的地方重新写一遍同样的代码,降低代码的冗余,加强了代码的可读性。

1.AOP的作用

  1. 抽取公共代码,减少代码冗余(如日志、事务处理等)
  2. 提高开发效率,使得维护更加方便
  3. 动态地增强代码而不需要改变原代码

2.AOP的本质是什么

AOP的本质是Java的动态代理技术。

  1. 当被代理类实现了某个接口时:使用JDK动态代理技术实现AOP
  2. 当被代理类没有实现某个接口时:使用CGLIB动态代理技术来实现AOP
  3. Spring还集成了AspectJ来完成动态代理

3.三种动态代理的实现本质是什么

  1. JDK动态代理的实质是通过反射在运行时获取到被代理类的方法然后进行增强(过程可以参考静态代理的做法,动态代理相对于静态代理的差异其实就算能在运行时获取到方法)。
  2. CGLIB动态代理技术的实质是在编译时,通过ASM来处理字节码,生成一个被代理类的子类对象,并拦截其方法,通过子类来增强。
  3. AspectJ技术原本是独立于Spring的一种基于编译时增强的动态代理技术,它可以在编译时修改类的字节码,而使其真正地含有增强的代码,所以无需在运行时去做其他操作,运行效率比JDK动态代理和CGLIB动态代理要高。目前Spring已经继承了AspectJ技术。 

二.Spring AOP的配置和使用过程

1.基于xml配置文件的使用

1.AOP核心概念

  1. 横切关注点:对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点

  2. 切面(aspect):类是对物体特征的抽象,切面就是对横切关注点的抽象

  3. 连接点(joinpoint):被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器

  4. 切入点(pointcut):对连接点进行拦截的定义

  5. 通知(advice) 所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类

  6. 目标对象 代理的目标对象

  7. 织入(weave)

将切面应用到目标对象并导致代理对象创建的过程

  1. 引入(introduction)

在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段

2.Spring对AOP的支持

Spring中AOP代理由Spring的IOC容器负责生成、管理,其依赖关系也由IOC容器负责管理。因此,AOP代理可以直接使用容器中的其它bean实例作为目标,这种关系可由IOC容器的依赖注入提供。Spring创建代理的规则为:

1、默认使用Java动态代理来创建AOP代理,这样就可以为任何接口实例创建代理了

2、当需要代理的类不是代理接口的时候,Spring会切换为使用CGLIB代理,也可强制使用CGLIB

对于Spring的AOP编程,我们只需要做三件事:

  1. 定义需要被代理的代码组件(或被增强的代码)

  2. 定义切入点,一个切入点可能横切多个代码组件

  3. 定义增强方法,它会被Spring织入到被代理的对象的特点切点方法上,在被代理方法执行之前增强被称为前置通知、在被代理的方法执行之后增强被称为后置通知、在被代理的方法中和其一起执行则被称为环绕通知、在被代理的方法发生异常后执行被称为异常通知。

即:代理对象的方法=增强处理+被代理对象的方法。

3.代码实现

  • aop.xml【模板】
<?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:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">
            
</beans>
  • 导入两个AOP所需的Jar包
  1. aopalliance.jar
  2. aspectjweaver.jar
  • 定义被代理类要实现的接口(这里使用的是JDK动态代理)
public interface HelloWorld
{
    void printHelloWorld();
    void doPrint();
}
  • 被代理的类
public class HelloWorldImpl1 implements HelloWorld
{
    public void printHelloWorld()
    {
        System.out.println("Enter HelloWorldImpl1.printHelloWorld()");
    }
    
    public void doPrint()
    {
        System.out.println("Enter HelloWorldImpl1.doPrint()");
        return ;
    }
}

public class HelloWorldImpl2 implements HelloWorld
{
    public void printHelloWorld()
    {
        System.out.println("Enter HelloWorldImpl2.printHelloWorld()");
    }
    
    public void doPrint()
    {
        System.out.println("Enter HelloWorldImpl2.doPrint()");
        return ;
    }
}
  • 增强类与增强方法
public class TimeHandler
{
    public void printTime()
    {
        System.out.println("CurrentTime = " + System.currentTimeMillis());
    }
}


  • applicationContext.xml:AOP配置 

<?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:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">
        
        
        <!--注册两个被代理类和增强类--!>
        <bean id="helloWorldImpl1" class="com.xrq.aop.HelloWorldImpl1" />
        <bean id="helloWorldImpl2" class="com.xrq.aop.HelloWorldImpl2" />
        <bean id="timeHandler" class="com.xrq.aop.TimeHandler" />
        
        <!--配置AOP--!>
        <aop:config>
            <!--AOP的id号,引用增强类--!>
            <aop:aspect id="time" ref="timeHandler">
                <!--切点配置--!>
                <aop:pointcut id="addAllMethod" expression="execution(* com.xrq.aop.HelloWorld.*(..))" />
                <!--expression="xx.package.HelloWorld.*(..)"表明增强HelloWorld类的全部方法--!>
                
                <!--配置前置通知--!>
                <aop:before method="printTime" pointcut-ref="addAllMethod" />
                <!--配置后置通知--!>
                <aop:after method="printTime" pointcut-ref="addAllMethod" />
            </aop:aspect>
        </aop:config>
</beans>

 

  • 测试
public static void main(String[] args)
{
    ApplicationContext ctx = 
            new ClassPathXmlApplicationContext("aop.xml");
        
    HelloWorld hw1 = (HelloWorld)ctx.getBean("helloWorldImpl1");
    HelloWorld hw2 = (HelloWorld)ctx.getBean("helloWorldImpl2");
    hw1.printHelloWorld();
    System.out.println();
    hw1.doPrint();
    
    System.out.println();
    hw2.printHelloWorld();
    System.out.println();
    hw2.doPrint();
}
  • 测试结果
CurrentTime = 1446129611993
Enter HelloWorldImpl1.printHelloWorld()
CurrentTime = 1446129611993

CurrentTime = 1446129611994
Enter HelloWorldImpl1.doPrint()
CurrentTime = 1446129611994

CurrentTime = 1446129611994
Enter HelloWorldImpl2.printHelloWorld()
CurrentTime = 1446129611994

CurrentTime = 1446129611994
Enter HelloWorldImpl2.doPrint()
CurrentTime = 1446129611994

看到给HelloWorld接口的两个实现类的所有方法都加上了代理,代理内容就是打印时间

2.基于注解配置的使用

1.applicationContext.xml

<?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">

    <!-- 激活组件扫描功能,在包spring_demo.aop_demo及其子包下面自动扫描通过注解配置的组件 -->
    <context:component-scan base-package="spring_demo.aop_demo"/>
    <!-- 强制CGLIB动态代理 -->
    <aop:aspectj-autoproxy proxy-target-class="true"/>
    <!-- 被代理对象 -->
    <bean id="targetClass" class="spring_demo.aop_demo.TargetClass" />
</beans>

2.TargetClass

package spring_demo.aop_demo;

/**
 * @Auther: ARong
 * @Description: AOP的被代理对象(目标对象)
 */
public class TargetClass {
    public void method() {
        System.out.println("TargetClass执行method");
    }
}

3.ProxyClass

package spring_demo.aop_demo;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

/**
 * @Auther: ARong
 * @Description: 代理对象也被成为切面,它用于织入切入点形成通知
 */
@Component
// 声明为一个切面
@Aspect
public class ProxyClass {
    private static final Log log = LogFactory.getLog(ProxyClass.class);

    // 配置切入点,这里切入点是TargetClass的所有方法
    @Pointcut("execution(* spring_demo.aop_demo.TargetClass.*(..))")
    public void aspect(){}

    /*
     * @Author ARong
     * @Description 前置通知
     * @Param
     * @return
     **/
    @Before("aspect()")
    public void before(JoinPoint point) {
        log.warn("前置通知生效....");
    }


    /*
     * @Author ARong
     * @Description 后置通知
     * @Param
     * @return
     **/
    @After("aspect()")
    public void after(JoinPoint point) {
        log.warn("后置通知生效");
    }


    /*
     * @Author ARong
     * @Description 环绕通知,proceedingJoinPoint用于放行方法和获取方法的相关数据,相当于拦截器
     * @Param
     * @return
     **/
    @Around("aspect()")
    public void around(JoinPoint point) throws Throwable {
        ProceedingJoinPoint proceedingJoinPoint = (ProceedingJoinPoint) point;
        // 方法开始执行时间
        Long star = System.currentTimeMillis();
        // 拦截方法放行
        proceedingJoinPoint.proceed();
        // 方法执行结束时间
        Long end = System.currentTimeMillis();
        String methodName = proceedingJoinPoint.getSignature().getName();
        log.warn("环绕通知生效,方法"+ methodName +"执行时间为"+(end - star)+"ms");
    }
}

4.TestAOP

package spring_demo.aop_demo.test;

import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import spring_demo.aop_demo.TargetClass;

/**
 * @Auther: ARong
 * @Description: 测试基于注解的AOP测试
 */
public class TestAOP {
    @Test
    public void testAOP() {
       @Test
    public void testAOP() {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        TargetClass targetClass = (TargetClass)context.getBean("targetClass");
        System.out.println(targetClass.getClass());
        targetClass.method();
    }
    }
}

输出分析

class spring_demo.aop_demo.TargetClass$$EnhancerBySpringCGLIB$$7eb9621b
十二月 06, 2019 2:09:11 下午 spring_demo.aop_demo.ProxyClass before
警告: 前置通知生效....
TargetClass执行method
十二月 06, 2019 2:09:11 下午 spring_demo.aop_demo.ProxyClass around
警告: 环绕通知生效,方法method执行时间为50ms
十二月 06, 2019 2:09:11 下午 spring_demo.aop_demo.ProxyClass after
警告: 后置通知生效

从输出结果可以看到,由于由于我们强制使用了CGLIB动态代理,所以这里生成的代理对象是class spring_demo.aop_demo.TargetClass$$EnhancerBySpringCGLIB$$7eb9621b,即TargetClass的一个子类。

三.JDK动态代理和CGLIB动态代理的使用

Spring的AOP是基于JDK动态代理和CGLIB动态代理的,理解JDK动态代理的基本实现和CGLIB动态代理的基本实现能够更好地让我们理解Spring AOP对代码的增强过程。

https://arong.blog.youkuaiyun.com/article/details/100174770

Spring Framework 4.2.4 实战:Jar包和Xsd文件深度解析 在Java开发中,jar(Java Archive)文件是一种压缩文件格式,用于封装Java类文件、元数据和资源(如文本、图片等)到一个单独的压缩文件中。Spring Framework的jar包根据其包含的组件和功能被分为不同的类别,以便于用户根据需要添加到项目中。例如::包含Spring框架的核心类,包括IoC容器和依赖注入的基础设施。:提供了Bean工厂和相关的Bean操作类。:为面向切面编程提供了支持,是AOP模块的核心。 阅读详情

相关推荐

手把手教你用nRF52832+RFX2401C设计远距离蓝牙模块(附完整原理图/PCB文件)

本文详细介绍了如何利用nRF52832 SoC与RFX2401C射频前端芯片设计远距离蓝牙模块,涵盖芯片选型、阻抗匹配、PCB布局等关键环节。通过实战指南和完整原理图/PCB文件,帮助工程师实现输出功率可达20dBm的蓝牙模块设计,适用于智能家居、运动追踪等物联网应用。

weixin_29214199的博客 287

Spring3:AOP

AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对...

weixin_34130389的博客 758

未来计算的革命:探索存算一体芯片的潜力与挑战

未来计算的革命:探索存算一体芯片的潜力与挑战

jtwqwq的博客 1615

Spring AOP详解

AOP AOP(Aspect Oriented Programming),即面向切面编程,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。 使...

CoderZS的博客 259

WandB本地部署踩坑指南:从Docker启动到License更新的完整流程(附常见错误解决方案)

本文详细介绍了Weights & Biases(WandB)机器学习实验管理平台的本地化部署全流程,涵盖从Docker环境搭建、许可证管理到常见错误排查的实战经验。针对企业级应用场景,文章还提供了性能优化、高可用架构设计及开源替代方案Trackio的评估与迁移策略,为构建安全、可控的内部实验追踪平台提供完整解决方案。

potato的博客 568

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

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

**My Coding Family** 1822

Spring AOP的几种实现方式

AOP核心概念 1、横切关注点 对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点 2、切面(aspect) 类是对物体特征的抽象,切面就是对横切关注点的抽象 3、连接点(joinpoint) 被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器 4、切入点(pointcut) 对连接

Mercop的专栏 2969

2025年GESP12月认证C++一级真题解析

摘要 本文包含13道C++编程选择题,每题2分,涉及语法、运算符、循环、条件判断等知识点。题目考察了变量命名规则、运算符优先级、赋值语句、循环控制、格式化输出等内容。部分题目解析与标答存在差异,例如第4题逗号表达式输出应为5但标答为4,第6题赋值运算结果应为4 4但标答为3 4等。这些题目适合用于检验基础编程能力,但需注意部分标答可能存在争议,建议结合具体编译环境验证。最后一题考察"漂亮数"判断,要求填写数字某位能被3整除的条件表达式。

lan_in的博客 755

Spring纯POJO切面实现AOP

1.导包 aopalliance.jar aspectjweaver.jar 2.编写Controller package com.chen.web; @Controller @RequestMapping("/list") public class MyController { @RequestMapping("test.html") public S

陈艾语的博客 1668

万字详解 PostgreSQL 的详细安装方式(Linux、Windows、macOS、Docker 全平台覆盖)

本文详细介绍了PostgreSQL在四大主流环境下的安装方法: Linux系统:针对Ubuntu/Debian和CentOS/RHEL系,分别提供APT/YUM仓库安装步骤,包括初始化配置和服务管理 Windows系统:通过图形化安装程序指导完成安装,包含组件选择、密码设置和pgAdmin配置 macOS系统:推荐使用Homebrew一键安装,支持Apple Silicon和Intel芯片 Docker容器:提供容器化部署方案(文中未展开) 文章强调安装前的版本选择、权限管理和存储规划,并针对各平台给出验证

数据知道的博客 4508

AUTOSAR系统服务篇 - BswM的使用

本文档是对4.0.3版及更高版本的AUTOSAR模式管理应用的介绍。其主要目的是为AUTOSAR的用户和开发人员提供基于示例的AUTOSAR模式管理不同方面的详细概述,这些示例在文中进行了解释。本文中的代码清单共同构成了示例ECU的配置。第2章解释了基础的模式管理概念,例如一般的模式、如何实现模式切换、模式管理者和模式用户的角色等。其次介绍了应用模式管理和基础软件模式管理的依赖关系,两者密切相关。基础软件模式管理器是AUTOSAR R4.0中的中央模式管理模块。它具有很高的可配置性。

IOT2017的博客 848

精通Spring Framework (4) 深入掌握Spring AOP(二)

二、 AspectJ 编译实现AOP AspectJ 是静态代理的增强,所谓的静态代理就是 AOP 框架会在编译阶段生成 AOP 代理类,因此也称为编译时增强。 AspectJ 是 Java 语言的一个 AOP 实现,其主要包括两个部分: 第一个部分定义了如何表达、定义 AOP 编程中的语法规范,通过这套语言规范,我们可以方便地用 AOP 来解决 Java 语言中存在的交叉关注点问题 另一个部分是工具部分,包括编译器、调试工具等。 AspectJ 是最早、功能比较强大的 AOP 实现之一,对整套 AOP 机

keep_learn的专栏 243

Android 车载应用之快速入门

车载 Android 系统也被称为 Android Automotive OS,是对原始 Android 系统的一个功能扩充版本。与手机系统一样,Android Automotive OS 源代码完全开放,第三方供应商和汽车制造商可以官方源码的基础上自行开发和拓展,无论是编程语言还是各项接口,都与 Android 系统保持了一致。

xiangzhihong8的专栏 1113

Spring Framework 学习笔记4:AOP

AOP(Aspect Oriented Programming,面向切面编程)是一种编程思想。它要解决的问题是:如何在不改变代码的情况下增强代码的功能。更详细的说明可以观看这个。

梦幻天空 304

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SPRING FRAMEWORK(4) AOP

reference:https://my.oschina.net/liughDevelop/blog/1457097 为了阐述清楚Spring AOP,我们从将以下方面进行讨论: 1.代理模式。 2.静态代理原理及实践。 3.动态代理原理及实践。 4.Spring AOP原理及实战。 1.代理模式。

llianlianpay的博客 222

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

spring-framework源码第4弹------Spring AOP的简单实现(学习tiny-spring)

声明:本代码来源于tiny-spring ,感谢原作者的源码 修改后的代码tiny-spring-copy

码农飞哥 1535

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

spring framework 3.2.4 各组件依赖包列表

aop: aopalliance commons-logging spring-beans spring-core   aspects: aopalliance aspectjweaver commons-logging spring-aop spring-beans spring-context spring-context-spport spring-core s

禅悟逍遥的专栏 2097

忘记加入spring-aop-4.3.16.RELEASE.jar出错

出错代码: java.lang.NoClassDefFoundError: org/springframework/aop/framework/AopProxyUtils at org.springframework.context.event.AbstractApplicationEventMulticaster.addApplicationListener(Abstr...

banghaoqs409152的博客 551

Spring Framework 2.5发布

Spring Framework 2.5发布 Spring Framework是Java平台上非常流行的开源框架之一。其最新的特征有:完全支持Java 6,JDBC 4,JAX-WS 2.0,基于annotation的依赖注入,在类路径中自动检测组件,自动配置组件作为Spring的被管对象的能力,新的AOP特征,多个Web层增强等等。另外一些值得注意的特征包括:1)A new be

chszs的专栏 2246

java hibernate Aop_java – 使用Spring AOP配置Hibernate会话

我有一个Spring Framework 4应用程序,它使用Hibernate 4.3.8作为JPA提供程序.我想使用Hibernate过滤器,因此我需要启用它们.我想在应用程序中全局执行此操作,我正在尝试使用Spring AOP.我的想法是,我可以编写一个方面,每次创建/获取会话时启用过滤器,如this和this问题.我已经将spring-aop和aspectjweaver依赖项添加到我的项目中...

weixin_33263633的博客 182

Spring全家桶深度解析与Java面试实战指南

Spring框架作为Java生态的核心技术栈,其设计思想与实现原理是开发者必须掌握的基础。从控制反转(IoC)到面向切面编程(AOP),Spring通过模块化架构解决了企业级应用开发的复杂性。随着云原生技术的普及,Spring Boot和Spring Cloud进一步提升了微服务架构的实施效率。这份阿里巴巴技术团队整理的Spring全家桶学习资料,不仅系统梳理了从基础原理到高阶应用的知识体系,更针对大厂面试场景进行了专项优化。资料包含Spring 6.x新特性解析、性能调优参数以及Spring Cloud

weixin_32247165的博客 223

Spring Framework 1.2.6 是 Spring 框架的一个非常早期的版本,发布于 **2005 年 10 月 27 日*

- 修复了 Spring 1.2.5 中发现的若干 bug(如 AOP proxy 创建异常、JDBC `JdbcTemplate` 的空值处理问题、Hibernate 集成中的事务传播行为等); - 增强了对 JDK 1.4 和 5.0(当时为 beta/RC 阶段)的兼容性; - 改进了对 Struts 1.x 的集成支持(`DelegatingActionProxy` 等); - 文档和示例的小幅更新。

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

spring框架 使用注解方式将bean加入ioc容器的问题:BeanDefinitionStoreException

0. 使用spring框架进行简单的aop演示,通过注解的方式将bean加入ioc容器(之前都是直接使用xml配置的方法加入bean的)抛出异常 1. 先贴异常信息: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: fil...

KooKing_L的博客 849

Spring AOP 需要包含的各种包

如果你用 spring-framework-4.2.5.RELEASE-dist 去开发基于AOP的程序,除了要安装aspectJ1.7 ,然后包含aspectJ1.7 lib 下的包外,   额外还需要包含下面的包: com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar cglib-2.2.2.jar com.springsourc

大树叶 技术专栏 5865
上一篇: Spring Framework(3)-IOC与DI总结
下一篇: hibernate各项配置
BoringRong
BoringRong 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 386原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值