SpringIOC和AOP介绍

2023-11-13

Spring介绍

1.spring是轻量级的开源的JavaEE框架

2.Spring可以解决企业应用开发的复杂性

3.Spring有两个核心部分:IOC、AOP

​ (1)IOC:控制反转,把创建好的对象给Spring进行管理

​ (2)AOP:面向切面编程,不修改源代码的情况下进行功能增加。

Spring特点

1.方便解耦,简化开发。

2.AOP支持

3.方便程序测试

4.方便和其他框架整合

​ 6.降低了API开发难度

IOC

IOC底层原理和基本概念

inversion for control 控制反转。把对象创建和对象之间的调用过程,交给spring进行管理。

使用目的:为了耦合度降低。

耦合度:也就是两个方法之间的关联程度,越小越好。

类似于图下,如果我去修改了UserDao中的add方法,那么Service层中的方法也需要去修改。 但是当我们去使用了工厂模式,就会去降低耦合度。

ioc接口 BeanFactory

​ 1、Ioc思想基于IOC容器完成,ioc就是对象工厂。

​ 2、spring提供ioc容器实现两种方式:(功能相似)

​ (1)**.beanFactory**:ioc容器基本实现,是spring自带 内部使用的,不提供给开发人员使用。

​ * 加载配置文件的时候,不会去创建对象。在获取对象(使用)才去创建对象。 什么时候用 什么时候创建对象。

(2)ApplicationContext:是BeanFactory接口的子接口,提供更强大的功能,由开发人员使用。

​ * 加载配置文件的时候,就会去创建对象。

常见的依赖注入三种方式

1、set方法进行注入

(在bean中创建属性和创建set方法)

​ 1.创建类,生成属性的set方法

​ 2.在配置文件中创建对象,后使用set方法注入属性

 <bean id="book" class="com.cztu.tdj.spring5.Book">
        <property name="bname" value="tdj"></property>
        <property name="bauthor" value="javaSpring"></property>
    </bean>

2、使用有参构造进行注入

(1)创建类,定义属性,创建属性的有参构造

(2)在spring的配置文件中注入

    <bean id="orders" class="com.cztu.tdj.spring5.Orders">
        <constructor-arg name="oname" value="拼多多"></constructor-arg>
        <constructor-arg name="address" value="120"></constructor-arg>
        
        //也可以基于index属性注入,0代表有参构造第一个属性
        <constructor-arg index=1 value="120"></constructor-arg>
    </bean>

使用注解test时,类必须为public,方法也必须是public!!!

3、p名称空间注入

(1)使用p名称空间注入,可以简化基于xml配置方式

1添加p名称空间在配置文件中
      xmlns:p="http://www.springframework.org/schema/p"
2使用set方法注入
<bean id="book" class="com.cztu.tdj.spring5.Book" p:bauthor="汤冬江" p:bname="javapy"/>

Bean管理(FactoryBean)

1、Spring有两种类型Bean,一中普通bean,还有一种是工厂bean。

2.普通bean:在配置文件中,定义的类型就是返回的类型。**

3.工厂bean:在配置文件中,定义的类型可以和返回类型不一样。

bean作用域:

prototype、singleton、session、request

singleton 和prototype区别:

(1)singleton是单实例,prototype 是多实例对象

(2)设置scpe值为singleton时,加载spring配置文件时会创建单实例对象。

(3)设置scpe值为prototype时,不是加载spring配置文件时会创建实例对象,而是用getBean时才去创建对象

Spring针对bean管理中创建对象提供注解**

(1)@Component

(2)@Service

(3)@controller

(4)@Repository

功能一样,都是创建bean实例。但是他们用到不同地方。

AOP

AOP:面向切面编程 。不通过修改源代码的方式,在主干功能里添加新功能。

aop底层原理

1、aop底层使用了动态代理

(1)有两种情况的动态代理:

​ 1、有接口的情况,使用jdk动态代理

​ ·创建接口实现类对象,去增强类中的方法

2、没有接口的情况,使用CGLIB动态代理

​ 创建子类的代理对象,去增强类中的方法

aop动态代理实现(jdk)

1、使用jdk动态代理,使用Proxy类里的方法创建代理对象

newProxyInstance其中的三个参数:(1)类加载器;(2)增强方法的所在类,这个类实现的接口,支持多个接口;(3)实现这个接口InvocationHandler,创建代理对象,写增强的方法

2、jdk动态代理代码

(1)创建接口,定义方法

(2)创建接口实现类,实现方法

(3)使用proxy类c

基于匿名内部类实现接口;

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

SpringIOC和AOP介绍 的相关文章

随机推荐

  • 1.3.3 手写数字识别之损失函数

    文章目录 概述 分类任务的损失函数 Softmax函数 交叉熵 交叉熵的代码实现 概述 上一节我们尝试通过更复杂的模型 经典的全连接神经网络和卷积神经网络 提升手写数字识别模型训练的准确性 本节我们继续将 横纵式 教学法从横向展开 如 图1
  • Ubuntu 20.04 下安装配置 VScode 的 C/C++ 开发环境

    前言 之前安装了Ubuntu 18 04 结果在安装Codeblocks VScode还是安装gcc c c 的时候出现了一堆错误 缺失依赖树等等问题 换源也无法成功 整了一个下午没有任何进展 网上找不到任何解决方法 于是只能重装了Ubun
  • 红队

    1 MS14 068 kerberos认证 no PAC 用户在向 Kerberos 密钥分发中心 KDC 申请TGT 由票据授权服务产生的身份凭证 时 可以伪造自己的 Kerberos 票据 漏洞效果 将任意域用户提升到域管权限 利用条件
  • promise的三种状态

    三种状态 es6 pending fufiled rejected 在promise种状态不可逆 时间不可倒流 promise时间有一个pending等待状态 如果实现fufiled状态 没实现rejected状态 解决了赘述问题 new
  • Redux使用教程【入门篇】

    Redux是一个用于JavaScript应用程序状态管理的可预测状态容器 以下是Redux的使用教程 安装Redux 在项目中使用npm或yarn安装Redux包 npm install redux 创建Redux Store 创建一个Re
  • vite、vue3警告:Component inside <Transition> renders non-element root node that cannot be animated.

    一 问题代码
  • 关于编程中的一些颜色代码

    颜色代码 1 浅粉色 255 182 193 2 粉红色 255 192 203 3 猩红色 220 20 60 4 脸红的淡紫色 255 240 245 5 苍白的紫罗兰红色 219 112 147 6 热情的粉红 255 105 180
  • 冰箱日订单数据分析(京东)python代码

    具体分析报告地址 PowerBi网页版 数据 2020年5月25日京东大家电 家用电器 冰箱订单数据 按10 抽样 约22MB 70k 条数据 包含信息 user log acct 用户账号 parent sale ord id 父订单号
  • Chrome等浏览器下出现net::ERR_BLOCKED_BY_CLIENT的解决办法

    当我们在做开发时 调试页面图片会出现部分图片无法正常显示 并且确认图片的地址正确 按F12 Debug查看报错原因 提示net ERR BLOCKED BY CLIENT错误 但当我们点击图片地址发现 图片地址并无错误 遇到这类情况 一般都
  • 关于一次element-ui的列表功能处理的过程记录(多选样式单选功能)

    大概是这样的 这边需要做两个表格 一个在左边 一个在右边 左边的已经做好了 是一个多选列表 右边的也做好了 是一个element ui自带的单选列表 就像这样 可是左边的多选列表样式和这个不一样 看着就会比较怪 所以要求我去修样式 我有点蒙
  • uni-app使用npm安装第三方包

    初始化npm工程 若项目之前未使用npm管理依赖 项目根目录下无package json文件 先在项目根目录执行命令初始化npm工程 npm init y cli项目默认已经有package json了 HBuilderX创建的项目默认没有
  • socket.io 中namespace 和 room的概念。

    基本概念看socketio官方文档 http socket io docs rooms and namespaces namespace 和room的概念其实用来同一个服务端socket多路复用的 namespace room和socket
  • PHP利用SOAP进行webservice开发(客户端)

    参考 http blog sina com cn s blog 777f9dbb01010fd1 html 配置 windows php ini配置 extension php soap dll extension php curl dll
  • linux主要的文件和目录的作用(详细版)

    在 Linux 下 我们看到的是文件夹 目录 在早期的 UNIX 系统中 各个厂家各自定义了自己的 UNIX 系统文件目录 比较混乱 Linux 面世不久后 对文件目录进行了标准化 于1994年对根文件目录做了统一的规范 推出 FHS Fi
  • DirectShowPlayerService::doSetUrlSource: Unresolved error code

    Qt 编译后不能播放音乐或者视频 经过搜索得知 Qt 中的多媒体播放 底层是使用DirectShowPlayerService 需要一个DirectShow解码器 例如LAV Filters LAV Filters的下载地址如下 http
  • FPGA的基本结构

    FPGA主要由以下几部分组成 1 基本可编程逻辑单元 CLB 2 可编程输入输出单元 IOB 3 嵌入式块RAM 4 内嵌的底层功能单元和嵌入式专用硬核 5 完整的时钟管理模块 6 丰富的布线资源 一 总体结构 二 基本组成部分 1 可配置
  • NMS(非极大值抑制)算法详解与示例

    一 NMS是什么 NMS non maximum suppression 即非极大值抑制 广泛应用于传统的特征提取和深度学习的目标检测算法中 NMS原理是通过筛选出局部极大值得到最优解 在2维边缘提取中体现在提取边缘轮廓后将一些梯度方向变化
  • vue设置延时

    参考资料 https blog csdn net zc ad article details 86235227 一定要创建一个timer 然后调用延时之前先清除timer的延时 clearTimeout this timer 清除延迟执行
  • scala数据结构

    元组 val tuple Bigdata 2020 748 333 容器 collection Scala Collection Seq 索引0 1 2 LinearSeq gt 列表 相同类型 不可变 队列 列表 var strList
  • SpringIOC和AOP介绍

    Spring介绍 1 spring是轻量级的开源的JavaEE框架 2 Spring可以解决企业应用开发的复杂性 3 Spring有两个核心部分 IOC AOP 1 IOC 控制反转 把创建好的对象给Spring进行管理 2 AOP 面向切