Spring的IOC,DI和AOP

2023-11-18

spring的优点

①IOC和DI降低了组件之间的耦合性 ,让程序员更专注于业务逻辑

②容器提供了众多的辅助类,能加快应用的开发

③spring对于主流的应用框架提供了集成支持,如hibernate,mybatis,Struts等

④spring属于低侵入式设计,代码的污染极低

⑤容器提供了AOP技术,利用它可以方便的实现权限拦截等功能

⑥创建对象默认是单例的,不需要再使用单例模式进行处理

⑦使用Spring构建的应用程序易于单元测试。

⑧Spring能够帮助我们真正意义上实现针对接口编程。

spring的IOC和DI

在传统的程序开发中,一个类如果需要用到另外一个类的功能,常常采用组合(也就是new 对象)或者使用工厂方法(工厂方法最终也是需要new) 的方式。这样类与类之间的耦合度变高了。

IOC(Inversion of Control)控制反转,DI(Dependency Injection)依赖注入,其实两者本质上是没有区别的

例如:在A类中调用B类的方法,那么我们就称 A依赖B,B为被依赖(对象),相信这点大家能够理解。

在spring中,B的实例对象被看成Bean对象,这个Bean对象由spring容器进行创建和管理,如此一来,A获取B的实例对象就不是由自己主动去获取,而是被动接受spring给它设值,那么,这个主动变为被动,就可以理解为“控制反转”。

而另一种说法,从spring容器的角度上看,它负责把A的依赖对象B(B是被依赖对象)注入给了A,所以我们可以理解为“依赖注入”

达到的效果:

你只需要在spring配置文件总配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类。

 

依赖注入的两种方式:

set方法注入和有参构造注入

IOC和DI的优点

降低了组件间的耦合度,增强了可维护性和复用性

 

IOC的底层原理

工厂模式+反射  可以采用dom4j来解析xml配置文件

我们可以把IOC容器的工作模式看做是工厂模式的升华,可以把IOC容器看作是一个工厂,这个工厂里要生产的对象都在配置文件中给出定义,然后利用编程语言的的反射编程,根据配置文件中给出的类名生成相应的对象。从实现来看,IOC是把以前在工厂方法里写死的对象生成代码,改变为由配置文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。

spring的aop

aop的使用场景

 

AOP,面向切面编程,不用修改源代码就可以扩展功能,底层使用动态代理实现

 

AOP中有三个重要的部分:

切入点(即类中实际增强的方法,aspectj可以和spring一起进行aop操作,可以通过在spring配置文件中使用表达式来配置切入点)

增强(又称为通知,消息)扩展的功能称为增强,通知包括前置通知,在方法之前执行,后置通知,在方法之后通知,异常通知,方法出现异常时通知,最终通知,在后置通知之后执行,环绕通知,在方法之前之后通知)

切面,切入点和增强的结合,就是把增强应用到具体方法上面的过程.

2 常用的表达式

execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)   -->访问修饰符可以为public,protected和private

(1)execution(* cn.itcast.aop.Book.add(..))  -->(..)表示可以有参数

(2)execution(* cn.itcast.aop.Book.*(..))

(3)execution(* *.*(..))

(4) 匹配所有save开头的方法 execution(* save*(..))

 

spring aop的使用方法①配置文件②使用注解(不太了解)

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring的IOC,DI和AOP 的相关文章

  • Mybatis代码生成器——让Java开发更高效

    Mybatis是一款优秀的ORM框架 在Java开发中广泛应用 然而 手写Mybatis代码工作量大 效率低 而Mybatis代码生成器可以帮助开发人员自动生成基本的CRUD代码 极大地提高了开发效率 本文将介绍如何使用Mybatis代码生
  • windgb调试

    reference http hi baidu com lewutian blog item 191047882b9c399fa5c27261 html 调试前的必备工作 在开始调试前首先要做的工作是设置好符号 Symbols 路径 没有符
  • epoll高度封装reactor,几乎所有可见服务器的底层框架

    目录 前言 reactor是什么 如何理解 reactor所需组件流程分析 组件 流程 如何将epoll的IO驱动封装成reactor事件反应堆驱动 reactor分块分析实现 注册事件处理器部分流程 多路复用器监视多路IO事件 事件分发器
  • computed与watch的区别

    一 computed与watch 在之前的练习中本人碰到computed来监听某个数据变化 我们都知道computed与watch都是可以监听数据变化 但具体要怎么区别它们呢 1 1 watch 1 1 1 watch的简单执行
  • 解析WINDOWS中的DLL文件---经典DLL解读

    在Windows世界中 有无数块活动的大陆 它们都有一个共同的名字 动态链接库 现在就走进这些神奇的活动大陆 找出它们隐藏已久的秘密吧 初窥门径 Windows的基石 随便打开一个系统目录 一眼望去就能看到很多扩展名DLL的文件 这些就是经
  • java自学笔记12:java中的集合框架(下)List

    一 学生选课 判断List中课程是否存在 思考 在课程序列中 如何判断是否包含某门或者某几门课程 如果课程序列包含某门课程 如何判断该课程的索引位置 在学生映射表中 如何判断是否包含某个学生ID 又该如何判断是否包含某个学生对象 如果想把课
  • Spring揭秘 学习笔记一 (Spring的IoC容器 一)

    Spring框架为POJO提供的各种服务共同组成了Spring的生命之树 如图1 1所示 第2章 IoC的基本概念 2 1 IoC全称为Inversion of Control 中文通常翻译为 控制反转 它还有一个别名叫做依赖注入 Depe
  • Struts2 重点总结 (2)

    国际化 资源文件和资源包 要用Struts实现国际化和本地化 首先要定义资源文件的名称 这个文件会包含用默认语言编写的会在程序中出现的所有消息 这些消息以 键 值 对的形式存储 如下 error validation localtion T
  • SpringCloud 微服务架构

    目前微服务架构还是比较火的 但是 为什么会选择springcloud 作为 微服务架构呢 列如 dubbo Motan 等等技术都是比较多的 但是依然springcloud 占据了很大一部分 值得深思 目录 一 选型依据 二 目前微服务架构
  • SpringMVC:从入门到精通,7篇系列篇带你全面掌握--七.自定义注解

    目录 Welcome Huihui s Code World 一 Java注解简介 1 原生注解的分类 1 JDK基本注解 Override SuppressWarnings value unchecked 2 JDK元注解 Retenti
  • 使用mybatis+spring整合,完成DAO及Service的整合,并完成对图书表的怎删改查操作

    SQL语句如下 CREATE TABLE tb book bookNo int NOT NULL AUTO INCREMENT name varchar 20 CHARACTER SET utf8 COLLATE utf8 bin NOT
  • 接口的加密解密

    接口加密 1 接口参数加密 基础加密 2 接口参数加密 接口时效性验证 一般达到这个级别已经非常安全了 3 接口参数加密 时效性验证 私钥 达到这个级别安全性固若金汤 4 接口参数加密 时效性验证 私钥 Https 我把这个级别称之为金钟罩
  • Spring的IOC,DI和AOP

    spring的优点 IOC和DI降低了组件之间的耦合性 让程序员更专注于业务逻辑 容器提供了众多的辅助类 能加快应用的开发 spring对于主流的应用框架提供了集成支持 如hibernate mybatis Struts等 spring属于
  • Weex 介绍

    文章目录 一丶Weex的介绍 二丶前置知识 三丶适用人群 四丶Weex的优势 五丶难点 六丶Weex ReactNative Flutter的区别 七丶设计理念 八丶基本原理 九丶有谁在用 十丶Weex调试工具 十一丶构建一个最简单的应用
  • 从0开始写Vue项目-Vue页面主体布局和登录、注册页面

    1 从0开始写Vue项目 环境和项目搭建 慕言要努力的博客 CSDN博客 2 从0开始写Vue项目 Vue2集成Element ui和后台主体框架搭建 慕言要努力的博客 CSDN博客 一 主体布局 关于主体布局 我们刚开始肯定是做的死数据的
  • Robotframework 入门教程(二)

    变量 RF用 分别表示标量 列表 和字典 对应的就是python中的sre list和dict RF中Variables用来创建变量 修改我们的demo robot如下 对应于python的语法 var value list1 a b c
  • Vue框架--Ruoyi解析(前端)

    路由router注册 router目录下的 index js 配合 permission js 是整套vue前端项目的权限判断核心 index js 里面的path 配置都是一些不会与权限挂钩的路由 例如 404 登录页面路径等 permi
  • target属性里_blank _self _top _parent区别

    blank 是指超链接连接的网页 是通过一个新的网页窗口打开 self的话 是指在本身这个网页窗口来打开新的网页链接 top与 self差不很大 但是如果你用了时 就会知道两者的差别了 因为如果你的超链接是 做在 上时 如果用 self 点
  • mfc窗口创建的create与oncreate

    在view类中 create 是虚函数由框架调用 是用来 生成一个窗口的子窗口 oncreate 消息响应函数 是用来 表示一个窗口正在生成 某个CWnd的Create函数由当前CWnd的Owner调用 而在CWnd Create中 又会调
  • iOS自动布局——Masonry详解

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由鹅厂新鲜事儿发表于云 社区专栏 作者 oceanlong 腾讯 移动客户端开发工程师 前言 UI布局是整个前端体系里不可或缺的一环 代码的布局是设计语言与用户视觉感受沟通的桥梁

随机推荐

  • java 导出excel实例(内含通用excel导出工具类)

    1 创建一个ExportPropertiesDto 用于动态导出表头 前端传过来的json数组类似 field year fieldName 年份 field departmentName fieldName 部门 field typeNa
  • 机器学习基础线性回归——预测网店的销售额

    线性回归 步骤 明确定义所要解决的问题 网店销售额的预测 在数据的收集与预处理环节 分五个环节完成数据的预处理工作 分别如下 1 收集数据 需要提供的网店的相关记录 2 将收集到的数据可视化 显示出来看一看 3 做特征工程 使数据更容易被机
  • python使用时间戳计算运行时间

    时间戳计算运行时间 from time import time time 记下每一次time 这一行命令时的时间戳 时间戳是一行数字 用来记录此时此刻的时间 t0 time 当前时间 for i in range 10 print i i
  • Java内存分区

    1 简介 内存全称电子计算机内存储器 用于暂时存储CPU中运行的数据以及与磁盘交换的数据 它是硬件存储与CPU进行沟通的桥梁 计算机中的所有程序进行都在内存中进行 所以java程序要想运行必须要在内存中申请一块空间 java内存中可以分为堆
  • 编译出错 程序中有游离的‘\302‘

    编者按 复制别人的代码到Linux中运行 在编译时出错 错误 程序中有游离的 302 查找资料后获取解决方法 在此做一个记录 错误提示如下 read c 164 6 错误 程序中有游离的 302 read c 164 6 错误 程序中有游离
  • 系统邮件模板的邮箱兼容性

    近期支付宝的系统邮件进行了一次改版 在这次改版的过程中 我们遇到了很多在网页中显示正常的html邮件在邮箱中显示异常的问题 下面我们把遇到的问题和一些常用的代码书写规则和大家分享 共性问题 许多邮箱都会出现的问题 1 字体大小会发生变化 排
  • 项目管理2:电子项目研发流程安排

    电子项目研发流程安排 项目研发各阶段安排 1 方案选型阶段 1 所做工作 方案调研 选型 可行性研究 2 设备采购 参考设备 参考方案 demo 注 此阶段全面初步了解设备需求 制定方案 采购验证用设备 2 方案验证阶段 1 所做工作 方案
  • jdbc,prepareStatement,表名为变量时无法使用占位符‘?’

    java操作有些数据库比如clickhouse暂时还用的是jdbc 执行sql时面临使用statement还是prepareStatement 其中statement写的简单不过会有sql注入最后安全检查不过 prepareStatemen
  • ctf文件包含+伪协议总结

    基本原理 后端编程人员一般会把重复使用的函数写到单个文件中 需要使用时再直接调用此文件即可 该过程也就被称为文件包含 文件包含的存在使得开发变得更加灵活和方便 但同时也带了安全问题 导致客户端可以远程调用文件 造成文件包含漏洞 这个漏洞在p
  • C++ 负数转二进制形式

    C 负数转二进制形式 1 十进制的负数转成二进制形式 include
  • 【VsCode远程开发】Windows SSH远程连接Linux服务器 - 无公网IP内网穿透

    文章目录 前言 视频教程 1 安装OpenSSH 2 vscode配置ssh 3 局域网测试连接远程服务器 4 公网远程连接 4 1 ubuntu安装cpolar内网穿透 4 2 创建隧道映射 4 3 测试公网远程连接 5 配置固定TCP端
  • Pandas中五个常见操作小结

    1 引言 Pandas是专门为csv excel等表格数据创建的数据分析 可视化和操作的第三方库 其中DataFrame是一种二维数据结构 它一般是由行和列组成的表格数据 在Python3中使用Pandas库 可以方便我们对表格数据执行相应
  • php 密码校验正则,PHP常用密码正则匹配验证

    PHP常用密码正则匹配验证 第一种 昵称2 10位字符 需由中文 数字 字母 区分大小写 和下划线组合 a 的方 b preg match x 4e00 x 9fa5 A Za z0 9 2 10 u a var dump b 第二种 正则
  • 备战2023蓝桥国赛-饼干

    题目描述 解析 这道题我想了很多种解决方法 但无一例外都失败了 实在是按照常规线性DP的思路真的想不出来 看了题解之后才知道它是分为三步解决这个问题的 第一步 缩小最优解的范围 先用贪心将最优解缩小到某个较小的范围内 再DP求出精确的最优解
  • 【C语言】C语言入门经典题目(范围广,内容多)

    作者 小孙的代码分享 专栏 C语言入门 送给各位的一句话 空杯心态 才能学到新知 希望大家看完这些题目有所收获 别忘了 点赞 评论 目录 前言 字符转ASCII码 判断闰年 简单计算器 包含数字9的数 十六进制转十进制 获得月份天数 求质数
  • MybatisPlus的注解

    MybatisPlus的注解 TableField exist false 表示该属性不为数据库表字段 但又是必须使用的 TableField exist true 表示该属性为数据库表字段 Mybatis Plus 插件有这个功能 可以看
  • RestTemplate使用详解

    文章目录 一 RestTemplate 简单使用 1 创建 RestTemplate 2 接口调用 二 其他设置 1 拦截器配置 2 ErrorHandler 配置 3 HttpMessageConverter 配置 在项目中 当我们需要远
  • 用Vscode编辑verilog代码配置

    这篇教程感觉很详细了 我这里分享一下vscode和插件的安装包链接 都是官网下载的 放心食用 用VSCode编辑verilog代码 iverilog编译 自动例化 自动补全 自动格式化等常用插件 链接 https pan baidu com
  • linux找共享内存

    find proc maps type f exec grep l lt 34865209 gt
  • Spring的IOC,DI和AOP

    spring的优点 IOC和DI降低了组件之间的耦合性 让程序员更专注于业务逻辑 容器提供了众多的辅助类 能加快应用的开发 spring对于主流的应用框架提供了集成支持 如hibernate mybatis Struts等 spring属于