Spring 两大核心 IOC 和 AOP

如果你的简历上写着Spring (请详述一下spring的两大核心)这个问题一定会被问到。

一、什么叫IOC

1.  IOC 全称(Inversion of Control)-- 控制反转。

IOC 只是一种设计思想,具体实现是 DI (Dependency Injection)-- 依赖注入

●谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对 象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。 
●为何是反转,哪些方面反转了:有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。

2.  IOC能干什么

它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是 松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。

传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是 松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。

3.  DI 全称(Dependency Injection)-- 依赖注入

组件之间依赖关系由容器在运行期间决定,即容器动态的将某个依赖关系注入到组件之中。 理解DI也要从两方面去理解:

●“谁依赖谁,为什么要依赖”:应用程序依赖于IOC容器,因为需要IOC容器来提供对象需要的外部资源。

●“谁注入谁,注入了什么”:将IOC容器注入应用程序的某个对象,注入了某个对象所需要的外部资源。

通俗来讲就是当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中

创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者。

二、 什么叫AOP

1.  AOP 全称(Aspect Oriented Programming)-- 面向切面编程
  面向切面编程(aop)是对面向对象编程(oop)的补充

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

核心原理:使用动态代理的设计模式在执行方法前后或出现异常常做加入相关逻辑

我们使用AOP来做: 
1)事务处理:执行方法前开启事务,执行完成后关闭事务,出现异常后回滚事务 
2)权限判断:在执行方法前,判断是否具有权限 
3)日志:在执行前进行日志处理。

2.  Spring AOP 原理:JDK动态代理

动态代理实现原理:一个实现接口的类可以做动态代理。我们需要实现的步骤是:

首先再写一个方法实现一个InvocationHandler接口,方法调用会被转发到该类的invoke()方法。

然后在需要使用Hello的时候,通过JDK动态代理获取Hello的代理对象。

以上是JDK动态代理的实现,我们在实现了invocationhandler接口的invoke方法中可以实现我们的逻辑操作,类中需要接口引用,带有接口引用为参数的有参构造方法,重写invoke方法

在我们需要代理的时候写入这些代码

Proxy.newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler handler)

参数1,实现接口也就是代理对象的类加载器

参数2,实现的接口

参数3,实现invocationhandler接口的类

因此,JDK代理会把所有实现接口的方法转发到invocationhandler中的invoke方法中,我们可以在这里实现任何的逻辑要求

原文地址:https://www.cnblogs.com/klyjb/p/11402627.html

时间: 2024-08-02 03:03:28

Spring 两大核心 IOC 和 AOP的相关文章

Spring 两大核心IOC和DI

Spring的两大核心是IOC和DI IOC:控制反转,对象创建的权利交给springApplication容器 DI:依赖注入,注入的是属性 传统意义上创建对象都是new操作. 举个例子: dao层类:UserDao service层类:UserService web(controller)层:UserController 三个层的调用关系为: web --->  service  --->   dao 这样的情况 web层会new一个service层对象 service层会new一个dao

Spring系列之——Spring事务以及两大核心IOC和AOP

1 Spring事务 1.1 Spring事务是什么(百度) 事务是对一系列的数据库操作(比如插入多条数据)进行统一的提交或是回滚操作,如果插入成功,那么一起成功,如果中间一条出现异常,那么回滚之前的所有操作. Spring事务管理机制使用的是TransactionManager进行管理.回滚注解@Transactional. 2 Spring特征 1)开源框架. 2)IOC(控制反转) 将类的创建和依赖关系写在配置文件中,由配置文件注入,实现松耦合. 3)AOP 将安全.事务等程序逻辑相对独立

Java入门到精通——框架篇之Spring源码分析Spring两大核心类

一.Spring核心类概述. Spring里面有两个最核心的类这是Spring实现最重要的部分. 1.DefaultListableBeanFactory 这个类位于Beans项目下的org.springframework.beans.factory.support包下. XmlBeanFactory(位于org.springframework.beans.factory.xml包)继承自DefaultListableBeanFactory,而DefaultListableBeanFactory

抖音运营为您分析抖音企业的两大核心价值

疫情带来挑战也带来机遇可以预见的是,运算能力会是企业未来的根本能力,像一些短视频.外卖平台就是抓住了这个能力,在疫情来临时,才不会手忙脚乱,反而流量再创新高,并从传统企业手中批量夺走客户.宅经的济兴起,电商.短视频.科技.人工智能等领域会飞速增长.顺应时代潮流,是每个企业都必须做的事情, 学会运营抖音将就是第一步.现在抖音运营抖商快车为您分析抖音企业的两大核心价值.建立品牌在短视频平台上的用户资产:一般来讲,很多品牌在进行短视频营销时,只是一次性投放,视频传播过后只能留下曝光数据.而有了企业号这

Java Spring 两大特色

0 引言 本文主要描述的是Spring常用的两大特色功能:AOP和IoC容器 1 IoC Spring的IoC:就是常说的“控制反转”,也又叫依赖注入的(DI). 优点:IoC最大的好处就是把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变得很简单(说的是基于接口的编程),只需要修改XML就可以了,这样我们不用重新编译即可运行,甚至可以实现对象的热插拔. 缺点:由于对象的生成使用了反射编程,所以也给它带来了影响效率的缺点,但是相对于它能提高可维护性和灵活性,这点损耗也就不算什么了,

hadoop两大核心之一:MapReduce总结

MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,MapReduce程序 本质上是并行运行的,因此可以解决海量数据的计算问题. MapReduce任务过程被分为两个处理阶段:map阶段和reduce阶段.每个阶段都以键 值对作为输入和输出.用户只需要实现map()和reduce()两个函数即可实现分布式计算. 执行步骤: map任务处理: 1.读取输入文件内容,解析成键值对(key/value).对输入文件的每一行,解析成 键值对(key/value).每一个键值对调

hadoop的两大核心之一:HDFS总结

什么是HDFS? hadoop distributed file system(hadoop分布式文件系统) 是一种允许文件通过网络在多台主机上分享的文件系统, 可让多机器上的多用户分享文件和存储空间. 特点: 1.通透性.让实际上是通过网络来访问文件的动作,由程序与用户看来, 就像是访问本地的磁盘一般. 2.容错性.即使系统中有某些节点脱机,整体来说系统仍然可以持续运作 而不会有数据损失. 适用场景: 适用于一次写入多次查询的情况,不支持并发写情况,小文件不合适. HDFS的架构 主从结构 主

深入理解Spring的两大特征(IOC和AOP)&lt;转&gt;

在某博主的博客上看到一篇解释Spring的两大核心IOC与AOP的文章,借此转发一下,希望能够帮助到更多的人. 原文地址:https://blog.csdn.net/gloomy_114/article/details/68946881 众所周知,Spring的核心特性就是IOC和AOP,IOC(Inversion of Control),即"控制反转":AOP(Aspect-OrientedProgramming),即"面向切面编程". IOC:IOC,另外一种说

【hadoop之翊】——hadoop大核心之HDFS初识

今天来说说hadoop的一大核心--HDFS,这个是很重要的,它呢,是分布式文件系统.为什么说hadoop能存储海量数据?其实主要还是依赖与hdfs的能力,主要依赖的是hdfs能存储海量数据. 1. 为什么hdfs能存储海量数据呢? 一开始抛出这样的问题来想想.至于HDFS的基本概念什么的都不用多说了的~我们重在使用,而不是去做"研究".扯蛋的话就是,"专家的研究"已经成为名副其实的贬义词了,很带有讽刺意义了,在现在这个时代~你们懂的~因为他们有的没有真正经历过,而