ioc容器与aop(面向切面编程)的使用

深入理解Spring IOC与AOP实现原理与代码实战 Spring框架自诞生以来,便成为Java企业级开发的核心基石,其设计目标是提高代码的可测试性、解耦性与可维护性。框架通过控制反转(IoC)实现对象的统一管理与解耦,并通过面向切面编程(AOP)将横切关注点(如日志、事务、安全)模块化,提升代码复用能力。Spring整体架构采用模块化设计,核心容器包括,在此基础上扩展了AOP、数据访问、消息处理、测试等模块。其中,IoC容器负责Bean的创建、装配与生命周期管理,而AOP模块。 阅读详情

一、ioc

 1、准备jar包

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.1.1.RELEASE</version>
</dependency>

2、在src下配置全局文件(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:conext="http://www.springframework.org/schema/context"
       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">
    <!--以下是注解-->
    <!--告诉ioc容器去哪些包中找呗注解了的类,并创建对象-->
    <conext:component-scan base-package="mapper"></conext:component-scan>
    <conext:component-scan base-package="entity"></conext:component-scan>
    <conext:component-scan base-package="controller"></conext:component-scan>
    <conext:component-scan base-package="service"></conext:component-scan>
    <!--以下是xml配置bean-->
    <!--<bean id="teacher" class="entity.Teacher">-->
        <!--<property name="tcName" value="罗帅"></property>-->
    <!--</bean>-->

    <!--&lt;!&ndash;使用反射创建一个无参对象,再利用setXXX方法设置属性,使用scope="singleton",可以每次新创建一个对象.自动注入bean(autowire="byType/byName"(依赖注入))&ndash;&gt;-->
    <!--<bean id="student" class="entity.Student" scope="singleton" autowire="byType">-->
        <!--<property name="stuId" value="1" ></property>-->
        <!--<property name="stuName" value="云哥"></property>-->
        <!--&lt;!&ndash;对象属性,私有,ref="teacher"(指向外面的bean)&ndash;&gt;-->
        <!--&lt;!&ndash;<property name="stuTeacher" ref="teacher"></property>&ndash;&gt;-->
        <!--<property name="stuDogs">-->
            <!--<list>-->
                <!--<bean class="entity.Dog">-->
                    <!--<property name="dogName" value="狗一"></property>-->
                <!--</bean>-->
                <!--<bean class="entity.Dog">-->
                    <!--<property name="dogName" value="狗二"></property>-->
                <!--</bean>-->
            <!--</list>-->
        <!--</property>-->
    <!--</bean>-->
    <!--&lt;!&ndash;使用构造方法创建对象&ndash;&gt;-->
    <!--<bean id="stu" class="entity.Student">-->
        <!--<constructor-arg index="0" value="11"></constructor-arg>-->
        <!--<constructor-arg index="1" value="bb"></constructor-arg>-->
    <!--</bean>-->
</beans>

二、aop(面向切面编程)的使用

1、准备jar包


<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.2</version>
</dependency>

2、src下配置全局文件(applicationContext.xml)

 第一种,使用xml(xml的意思是用xml来对应相应的文件,以实现aop)

<!--aop面向切面-->
    <!--xml-->
    <!--全部扔到ioc容器中-->
    <!--<bean id="logUtil" class="uti.LogUtil"></bean>-->
    <!--<bean  class="service.StudentService"></bean>-->
    <!--配置aOp-->
    <!--<aop:config>-->
        <!--<aop:pointcut id="pt" expression="execution (void service.StudentService.insert()) or execution (void service.StudentService.delete())"></aop:pointcut>-->
        <!--&lt;!&ndash;配置切面&ndash;&gt;-->
        <!--<aop:aspect ref="logUtil">-->
            <!--<aop:before method="before" pointcut-ref="pt"></aop:before>-->
            <!--<aop:after method="after" pointcut-ref="pt"></aop:after>-->
            <!--<aop:after-returning method="afterReturned" pointcut-ref="pt"></aop:after-returning>-->
            <!--<aop:after-throwing method="afterException" pointcut-ref="pt"></aop:after-throwing>-->
        <!--</aop:aspect>-->
    <!--</aop:config>-->

第二种、使用注解(使用注解是因为他会自动扫描项目中对应的aop文件以及方法:个人推荐用注解,因为比较方便)

<!--以下是注解-->
    <!--告诉ioc容器去哪些包中找呗注解了的类,并创建对象-->
    <conext:component-scan base-package="mapper"></conext:component-scan>
    <conext:component-scan base-package="entity"></conext:component-scan>
    <conext:component-scan base-package="controller"></conext:component-scan>
    <conext:component-scan base-package="service"></conext:component-scan>
    <conext:component-scan base-package="uti"></conext:component-scan>
    <!--aop:注释-->
    <!--自动扫描并生成代理对象-->
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>

3、aop切面方法(util中),aop的使用

第一种,以xml的方式,对应2中的xml

public void before(){
        System.out.println("前置通知");
    }
    //后置通知无论如何都会执行
    public void after(){
        System.out.println("后置通知");
    }
    //返回通知,目标方法如果出错就不执行
    public void afterReturned(){
        System.out.println("返回通知");
    }
    public void afterException(){
        System.out.println("异常通知");
    }

第二种,以注解的方式、对应2中的注解

@Aspect
@Component
public class LogUtil {
    @Pointcut("execution(* service.*.*(..))")
    public void pointcut(){}

    @Before("pointcut()")
    public void before(JoinPoint jpt){
        Signature sig= jpt.getSignature();
        String name=sig.getName();
        System.out.println("前置通知"+name);
    }
    //后置通知无论如何都会执行
    @After("pointcut()")
    public void after(){
        System.out.println("后置通知");
    }
    //返回通知,目标方法如果出错就不执行
    @AfterReturning(value = "pointcut()",returning = "val")
    public void afterReturned(Object val){
        System.out.println("返回通知,结果是"+val);
    }
    @AfterThrowing(value = "pointcut()",throwing = "e")
    public void afterException(Throwable e){
        System.out.println("异常通知结果是"+e.getMessage());
    }
    //环绕通知
//    @Around("pointcut()")
    public Object arround(ProceedingJoinPoint pjp){
        //前置
        System.out.println("环绕前");
        Object result=null;
        try {
            //执行目标方法
            result=pjp.proceed();

            System.out.println(3/0);
            System.out.println("环绕成功");
            //返回
        } catch (Throwable throwable) {
            System.out.println("环绕异常");
            //异常
            throwable.printStackTrace();
        }
        //后置
        System.out.println("环绕后置");
        return result;
    }

=============================================================================================、

备注:

以上的说法会有些模糊,但是这是我对应上课学习做出来的相应的笔记,也就是上述其实是笔记

大家学到spring的时候在看上述的代码以及注释就应该能够了解了。

上面是因为自己以防忘记弄出来的,需要回忆的时候只需要看一眼就可以记住了。

总而言之希望能帮助大家,这里给大家分享一下自己的经验,好记性不如烂笔头,但现在有电脑就方便许多了,也是因为如此我们何不如将重要以及自己记不住的东西用电脑来代替自己呢。记事本只是其中一种笔记方法,还有许许多多的软件,大家可以去了解一下,总会找到合适自己的学习方法,以及记录的软件。

AI气象预报:数值模式融合与短临预警的工程实践 气象预报正经历从物理推演到数据驱动的认知范式转变。AI气象预报并非替代传统数值模式,而是通过数值模式融合弥补其在参数化误差、初值敏感性和计算效率上的固有瓶颈。其技术价值在于提升短临预警时效性与空间精度,支撑航空调度、电力调控、防洪应急等关键场景。实践中需兼顾物理一致性、可解释性与业务系统兼容性,避免纯黑箱建模带来的外推失效与不确定性缺失风险。本文聚焦AI作为超分辨率引擎、误差矫正器和短临加速器的三类落地路径,解析HEALPix投影、多尺度图建模、轻量级U-Net等核心适配方法。 阅读详情

相关推荐

LinuxCNC 源码解析:从界面开发到硬件交互的实战指南

本文深入解析LinuxCNC源码架构,从用户界面开发到硬件交互的实战指南。涵盖GTK与Tkinter界面开发、HAL硬件抽象层、G代码解析器改造及运动控制核心等关键模块,提供定制化开发技巧与性能优化方案,助力开发者高效掌握数控系统开发。

weixin_27066963的博客 190

JAVA实现Spring IOC 容器技术和AOP切面编程技术

JAVA实现Spring IOC 容器技术和AOP切面编程技术Spring IOC介绍spring AOP自定义spring ioc容器和AOP切面技术实现过程创建注解创建扫描注解父类创建IOC相关的类IOC的创建最后来编写测试类结束语 Spring IOC介绍 spring ioc技术在目前来说已经是非常成熟的JAVA容器技术了,使用也是非常广泛,可以说目前市场上用了spring,那么IOC是其最核心的部分;IOC全称叫Inversion of Control,是控制反转的意思,平时我们编写java代码时

JAVA技术爱好者 705

Advanced Installer打包避坑指南:如何正确配置64位系统下的Java环境与注册表条件(以15.7版本为例)

本文详细解析了使用Advanced Installer 15.7版本在64位系统下打包Java应用时的常见问题与解决方案。重点介绍了注册表重定向机制、Java环境检测的双保险策略、环境变量设置的隐藏坑以及权限管理的进阶技巧,帮助开发者避免安装包在用户机器上无法运行的幽灵问题。

weixin_28676289的博客 325

安全产品概述

IOA并不关注他开的是什么车,用了什么工具,IOA关注的是这一系列的操作:破解密码、进入金库等,记录盗贼抢银行的关键行为。IOA的概念是主动的,去发现正在进行的攻击,来减轻最终的后果。举例来说,如果攻击应用系统(如apache、nginx、php-cgi等)、数据库(mysql、oracle、postgres、sqlserver、redis等)、语言进程(java、python),在这些应用场景下如果起了进程,执行了curl、ifconfig、nc、ping等危险操作,就可能会被记录下来。

好记性不如烂笔头 2228

yolov5 onnx推理时报错[ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Unexpected input data type.

yolov5 onnxruntime 推理报错

zjulkw的博客 1223

模糊PID vs 传统PID:双容水箱液位控制实战对比(含Simulink模型下载)

本文深入对比了模糊PID与传统PID在双容水箱液位控制中的性能表现,通过Simulink建模和动态性能指标分析,揭示模糊PID在超调量、调节时间和抗干扰能力上的显著优势。文章提供详细的MATLAB配置参数和工程应用建议,帮助工程师优化控制系统设计。

data3的博客 503

FFmpeg HDR视频转SDR视频命令

之前蓝光盘电影多是AVC 1080p 8bit SDR格式视频,近两年4K电影流行,下载的蓝光电影多是HEVC 2160p 10bit HDR视频格式。 ffprobe查看有如下属性: # 10bit HDR Stream #0:0(eng): Video: hevc (Main 10), yuv420p10le(tv, bt2020nc/bt2020/smpte2084), 3840x2160 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 23.98

彼此当年少,莫负好时光 1万+

从壹开始前后端分离 [ Vue2.0+.NetCore2.1] 二十六║Client渲染、Server渲染知多少{补充}...

前言 书接上文,昨天简单的说到了 SSR 服务端渲染的相关内容《二十五║初探SSR服务端渲染》,主要说明了相关概念,以及为什么使用等,昨天的一个小栗子因为时间问题,没有好好的给大家铺开来讲,今天呢,咱们就继续说一下这个 SSR 服务端渲染,并结合着 Client 客户端渲染,一起说一说相关的内容,当然还是围绕着原理来的,并不是要搭建项目,项目我会在下一个系列说到,经过和群里小伙伴的商量,并采纳大...

weixin_30871293的博客 286

【推荐100个unity插件】动画重定向,快速在不同角色间共享动画,共用非人形Humanoid(泛型generic)动画——Retarget Pro

Retarget Pro是一款高效的Unity动画重定向工具,可快速在不同角色间共享动画。主要特点包括:1分钟快速设置,支持编辑器和运行时重定向;适用于人形、动物、武器等各类角色;提供基础重定向、IK重定向和FPS专用重定向三种功能模块;通过Rig组件和骨架资产实现骨骼链匹配,支持批量处理。插件包含示例项目和预设资源,操作简便且效果优于Unity原生Humanoid系统,特别适合处理手指等精细动画。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 549

YOLOv11改进策略【卷积层】| TIP 2025 MFA 多阶段特征聚合 大核扩感受 + 多梯度融合,强效增强弱小目标特征

红外弱小目标尺寸极小、信噪比低,在特征传递中极易丢失信息;常规卷积感受野单一、梯度源不足,难以同时捕捉局部细节与全局上下文,导致小目标特征表达弱、检测漏检。因此提出多阶段特征聚合 MFA,用大核卷积+多分支+通道注意力强化小目标特征提取。

Limiiiing的博客 589

深入理解Spring框架IOC容器和AOP

深入理解Spring框架IOC容器和AOPSpring开源框架的简介Spring下IOC容器和DISpring面向切面编程(AOP)概念定义: Spring开源框架的简介 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 Spring的基本框架主要模块:DAO、ORM、AOP、Context、WEB、CORE。 Spring DAO:Spring提供了对JDBC的...

李也的博客 2618

AutoSAR从0开始实战 --- 目录

​​​​​​本专栏是全网最真实的AutoSAR实战专栏,博主将从一个0基础小白的身份来讲解AutoSAR工具的配置,以及相应代码的讲解。

wj博客 1730

再次理解 Spring 中的 IOC、DI、AOP 与多态

IOC(Inversion of Control)是一种设计原则,它将对象的创建和依赖关系的管理从应用程序代码中转移到框架或容器中。在 Spring 中,IOC 容器负责创建和管理 Bean 的生命周期。将对象的创建权力反转给Spring框架!DI(Dependency Injection)是 IOC 的一种实现方式,它通过将依赖关系注入到对象中,而不是由对象自己创建依赖。

秃头之旅 1198

Camera2Demo

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

lwip-2.0.3

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

AOP 和 IOC

在面试中,经常会问,说说你对spring IOC和AOP的理解,问题很宽泛,似乎不知道从何说起。 回答思路:1.先用通俗易懂的话解释下何为IOC和AOP---------》2.各自的实现原理-----------》3.自己的项目中如何使用 以下是个人的一些总结,仅供参考。 1.IOC 许多应用都是通过彼此间的相互合作来实现业务逻辑的,如类A要调用类B的方法,以前我们都是在类A中,通过自身...

hexiaoli666的博客 1366

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

IoC和AOP

Spring 入门之 IOC 与 AOP Spring 是目前最流行的 Java 开发框架, Java 企业开发中的 SSH 或者 SSM 都与 Spring 有关。 Spring 最根本的使命是简化 Java 开发。 基于这一使命,Spring 有了以下 4 中关键策略: 基于 POJO 的轻量级和最小侵入式编程; 通过依赖注入和面向接口编程实现松耦合; 基于切面和惯例进行声明式编程; 通过切面和模板减少样板式代码。 Spring 核心:

wojiwo03的博客 290

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

spring ioc踏出第一步

spring IOC(容器) AOP(面向切面编程) IOC容器:他的功能就是可以整合像 Structs2 、Hibernate、Mybatis; IOC:控制反转;所谓的控制就是控制资源的获取方法,获取资源的方式又分为主动和被动方式; 什么是主动式: 就是要使用什么资源我们就new 出来 BookServlet bs = new BookServlet(); 什么是被动式? 例如要使用一个use...

编程小白养成手记 167

深入浅出AOP(二)--IOC容器

上一篇,用的静态代理实现了AOP,实际上,AOP就是一种思想,实现的方式有很多种,而要实现AOP,将提供的非业务类的方法(服务类)放在容器中,更加高级一点。 IOC就是提供了一种容器。 AOP+IOC实现: 整体的解决方案: 在这个里面,我们首先写Model: using System; using System.Collections

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

Java 手写 Spring框架 IOC 和 AOP----手写Spring IoC和AOP

本文将首先通过手写Spring,了解Spring基本思想,然后介绍Spring的一些高级用法,随后深度剖析其源码,让读者有更深入的了解====本文源码基于5.1.12版本讲解

殷志鹏的博客 2541

C#---AOP面向切面编程应用

1.基本概念 AOP(Aspect Oriented Programming)是一种能够在现有面向对象封装的基础上,为了满足软件业务扩展的需求,实现程序动态扩展的一种方式。 场景:适合软件的二次开发应用,动态扩展某些业务,但是尽量的让这些改动最小。 个人理解:给现有业务方法拓展功能,而对原来封装没有破坏. 2二.AOP的实现方式 2.1 基于Attribute特性给实体类的属性验证 这一步就是获取注入的特性,并调用特性中的验证方法,对属性值进行验证. 2.2基于装饰器设...

qq_58563355的博客 6381

对于Spring IOC、DI、AOP的理解?

IoC(Inversion of Control)即控制反转,是一种设计原则,用于减少代码间的耦合。传统编程中,对象的创建和依赖管理由程序自身控制,而IoC将这些职责交给容器或框架处理。依赖注入是一种设计模式,用于实现IoC。对象的依赖关系不由对象自己创建,而是由外部容器注入。对象只需要声明它需要什么依赖,而不需要关心依赖的具体实现和创建过程。

H___Hkk的博客 1293

简单谈一下:Spring中IOC和AOP的详细解释

我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂。主要用 到的设计模式有工厂模式和代理模式。 IOC就是典型的工厂模式,通过sessionfactory去注入实例。 AOP就是典型的代理模式的体现。 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把...

software_skyvip的博客 557

Spring框架IOC容器和AOP解析

Spring框架IOC容器和AOP解析 AOP 你想干什么 IOC 你服务什么 spring - ioc和aop

weixin_44096353的博客 171

Spring基本体系,IoC容器,Bean,面向切面编程(AOP),AspectJ开发(学习笔记)

Spring基本体系 SpringIoC容器 IoC(控制反转): 也就将所有Bean放在Sping中,统一管理创建 ApplicationContext context=ClassPathXmlApplicationContext("") // 相对路径从src <bean id="" class=" /> DI(依赖注入): 为对象加入相应属性 ...

weixin_42971363的博客 376

Spring AOP Capabilities and Goals

Spring中AOP代理由Spring的IOC容器负责生成、管理,其依赖关系也由IOC容器负责管理。 因此,AOP代理可以直接使用容器中的其它bean实例作为目标,这种关系可由IOC容器的依赖注入提供。 转载于:https://www.cnblogs.com/followlqc/p/10707073.html...

weixin_34380296的博客 72

Spring框架IOC容器和AOP解析 非常 有用

Spring框架IOC容器和AOP解析 主要分析点: 一、Spring开源框架的简介 二、Spring下IOC容器和DI(依赖注入Dependency injection) 三、Spring下面向切面编程(AOP)和事务管理配置 一、Spring开源框架的简介   Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由...

weixin_34352005的博客 73
上一篇: java初学者的第一个小小web项目心得
ZWY_Java
博客等级 码龄8年 1粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值