java中的Spring里面的ioc和aop有什么区别?他们都有什么用?

作者&投稿:线瑗 (若有异议请与网页底部的电邮联系)
spring框架的核心概念:IoC和AOP到底有什么用?~

使用ioc的好处就是可以修改配置而不用重新编译.
class A {
int a;
int b;
int add(){
return a+b;
}
public void seta(int a){this.a=a;}
public void setb(int b){this.b=b;}
}

a和b的值就可以在指定的xml文件里修改.

AOP就是比如你要执行一个登录的方法login(),调用的这个方法的时候,就可以使用AOP进行切入来进行登录前的验证或者登录后的日志工作等。这个例子太麻烦了,自己看看书吧
http://wiki.redsaga.com/confluence/display/Spring2/Spring2.5
Spring2.5的中文手册,看这个算了

控制反转(IOC)

(理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”)
1、Ioc—Inversion of Control:即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。
2、谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象即由Ioc容器来控制对象的创建。
谁控制谁?当然是IoC 容器控制了对象。
控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。
3、为何是反转,哪些方面反转了: 有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象。
为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转。
哪些方面反转了?依赖对象的获取被反转了。
还是不明白没事,下面搞个简单案例来说就懂啦 !!!
例子:当我们在任何一个有实际开发意义的程序项目中,我们会使用很多类来描述他们特有的功能,并且通过类与类之间的相互协作来完成特定的业务逻辑。这个时候,每个类都需要负责管理与自己有交互的类的引用和依赖,代码将会变的异常难以维护和极高的高耦合。而IOC的出现正是用来解决这个问题,我们通过IOC将这些依赖对象的创建、协调工作交给spring容器去处理,每个对象值需要关注其自身的业务逻辑关系就可以了。在这样的角度上来看,获得依赖的对象的方式,进行了反转,变成了由spring容器控制对象如何获取外部资源(包括其他对象和文件资料等)。
总的来说:IOC就是通过在Xml配置文件里依赖注入来解决代码问题。

IOC的注入类型有几种?主要可以划分为三种:构造函数注入、属性注入和接口注入。Spring支持构造函数注入和属性注入


面向切面(AOP)

(面向切面编程,AOP其实只是OOP的补充而已,AOP基本上是通过代理机制实现的。)
我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。
我们都知道 Java 是 OOP-面向对象编程的,它有自己的优势,也有自己的不足。比如说:在我们开发中,都会有一条业务主线(即客户的需求)。而我们要做的就是实现这个主线上的需求。我们在实现这些功能的时候,经常要干一些额外的不可避免的事情,比如事务的管理,日志的记录等,就很繁杂且代码量增多,所以 Spring 提供了另一种角度来思考程序结构,也就是把这一些事情剥离出来,然后适时适地的把它们加入到我们的代码中,比如说 声明式事务管理的时候,我们在 service 层检测到save*、update*这些方法要被调用的时候,我们先进行开启事务什么的,这就是AOP,面向编程的思想。

AOP的术语:
1、通知(Advice):就是你想要的功能,也就是上面说的 安全,事物,日志等。你给先定义好把,然后在想用的地方用一下
2、连接点(JoinPoint):这个更好解释了,就是spring允许你使用通知的地方,那可真就多了,基本每个方法的前,后(两者都有也行),或抛出异常时都可以是连接点,spring只支持方法连接点.其他如aspectJ还可以让你在构造器或属性注入时都行,不过那不是咱关注的,只要记住,和方法有关的前前后后(抛出异常),都是连接点。
3、切入点(Pointcut):上面说的连接点的基础上,来定义切入点,你的一个类里,有15个方法,那就有几十个连接点了对把,但是你并不想在所有方法附近都使用通知(使用叫织入,以后再说),你只想让其中的几个,在调用这几个方法之前,之后或者抛出异常时干点什么,那么就用切点来定义这几个方法,让切点来筛选连接点,选中那几个你想要的方法。
4、切面(Aspect):切面是通知和切入点的结合。现在发现了吧,没连接点什么事情,连接点就是为了让你好理解切点,搞出来的,明白这个概念就行了。通知说明了干什么和什么时候干(什么时候通过方法名中的before,after,around等就能知道),而切入点说明了在哪干(指定到底是哪个方法),这就是一个完整的切面定义。
5、引入(introduction):允许我们向现有的类添加新方法属性。这不就是把切面(也就是新方法属性:通知定义的)用到目标类中吗
6、目标(target):引入中所提到的目标类,也就是要被通知的对象,也就是真正的业务逻辑,他可以在毫不知情的情况下,被咱们织入切面。而自己专注于业务本身的逻辑。
7、代理(proxy):怎么实现整套aop机制的,都是通过代理,这个一会给细说。
8、织入(weaving):把切面应用到目标对象来创建新的代理对象的过程。有3种方式,spring采用的是运行时,为什么是运行时,后面解释。

IOC的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。Spring容器负责将这些联系在一起。也就是说,Spring的IOC负责管理各种对象的创建、清除以及它们之间的联系。AOP是指面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。一般用于事务管理、权限控制、错误处理等各种业务中共同性的东西。

什么是IoC
Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下:
控制是什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。
为何是反转,哪些方面反转了:有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。
IoC能做什么

IoC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。
其实IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。
IoC和DI
DI—Dependency Injection,即“依赖注入”:是组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。
注:如果想要更加深入的了解IoC和DI,请参考大师级人物Martin Fowler的一篇经典文章《Inversion of Control Containers and the Dependency Injection pattern》,原文地址:http://www.martinfowler.com/articles/injection.html。
AOP:面向切面编程
什么是AOP:
概念:在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。(百度百科)
简单的说:就是将程序中重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的基础上,对我们的已有方法进行增强。
AOP的作用和优势:
作用:从定义中来看,就是为了在程序运行期间,不修改源码对已有方法进行增强。
优势:减少重复代码 提交了开发效率 维护方便
实现方式: 就是动态代理的技术
具体的作用:实现事务的控制 日志 和 安全模块
想系统的学习编程可以来我这看看,希望对您有所帮助!~

ioc就spring的容器里面放的就是一些bean对象,aop只是一种切面编程思想在spring中主要用于事务控制那一块了.............


前端开发和后端开发的区别?
展示方式:Web前端开发主要做的是偏向用户看得见的部分。后端开发主要做的是逻辑功能等模块,是用户不可见的。知识结构:Web前端开发涉及到的知识主要有Html、CSS、avaScript、Android开发、iOS开发、各种小程序开发技术等。Web前端代码主要在客户端运行:后端开发以Java为例,主要用到的是StrutssprispringmvcH...

最好听的女生英文名,s开头
Andrea 安德丽亚 Barbara 笆笆拉 Catherine 凯瑟琳 Cathy 凯西 Charlotte 夏绿蒂 Christina 克莉斯婷娜 Christine 克莉斯婷 Daisy 戴西 Deborah 黛博拉 Elizabeth 伊丽莎白 Ellen 艾伦 Emily 艾蜜丽 Hannah 寒娜 Helen 海伦 Jacqueline 杰葵琳 Jane 珍 Jennife 珍尼佛r Jessica 杰西卡 Joan 琼 Judy 朱蒂 J...

web 前端开发和后端开发有什么区别
展示方式:Web前端开发主要做的是偏向用户看得见的部分。后端开发主要做的是逻辑功能等模块,是用户不可见的。知识结构:Web前端开发涉及到的知识主要有Html、CSS、avaScript、Android开发、iOS开发、各种小程序开发技术等。Web前端代码主要在客户端运行:后端开发以Java为例,主要用到的是StrutssprispringmvcH...

前端开发和后端开发有什么区别?
后端开发主要做的是逻辑功能等模块,是用户不可见的。知识结构:Web前端开发涉及到的知识主要有Html、CSS、avaScript、Android开发、iOS开发、各种小程序开发技术等。Web前端代码主要在客户端运行:后端开发以Java为例,主要用到的是StrutssprispringmvcHibernateHttp协议ServletTomcat服务器等技术,通常需要根据...

后端开发和前端开发的区别
后端开发主要做的是逻辑功能等模块,是用户不可见的。知识结构:Web前端开发涉及到的知识主要有Html、CSS、avaScript、Android开发、iOS开发、各种小程序开发技术等。Web前端代码主要在客户端运行:后端开发以Java为例,主要用到的是StrutssprispringmvcHibernateHttp协议ServletTomcat服务器等技术,通常需要根据...

兴宁区13451436749: java中的Spring里面的ioc和aop有什么区别?他们都有什么用? -
赧邓唯他: IOC的基本概念是:不创建对象,但是描述创建它们的方式.在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务.Spring容器负责将这些联系在一起.也就是说,Spring的IOC负责管理各种对象的创建、清除以及它们之间的联系.AOP是指面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术.一般用于事务管理、权限控制、错误处理等各种业务中共同性的东西.

兴宁区13451436749: java中的io 流到底怎么理解 -
赧邓唯他: IO包括输入和输出流,输入流指的是将数据以字符或字节形式从外部媒介比如文件、数据库等读取到内存中所以也分为字符输入流和字节输入流. 输出流指的是将内存中的数据写入外部媒介,也分为了字符输出流和字节输出流.

兴宁区13451436749: spring中的ioc是什么单词的缩写? -
赧邓唯他: spring有2大核心,ioc是Inversion of Control 控制反转的简写,一般称为 (依赖注入),而aop全称Aspect Oriented Programming ,中文意思的 (面向方面的编程) 或者说 (面向切面的编程).

兴宁区13451436749: 麻烦讲解一下Java中Spring中IOC和AOP? -
赧邓唯他: IoC:说直白点,就是通过配置文件(XML或.properties)指定需要实例化的JAVA类(类名的完整字符串),包括该JAVA类的一组初始化值,然后我们在代码中加载该配置文件,然后通过 .getBean() 函数就可以得到一个该JAVA类的对象,并且该对象已经根据配置文件中指定的属性值进行了初始化. AOP:这个比IoC更简单,直白点说就是实现调用某个方法之前或/和之后,自动执行一系列自定义的语句

兴宁区13451436749: java中的import java.io.*是什么意思 io具体又是什么意思 -
赧邓唯他: import java.io.* 引入java.io下的所有文件 io是输入输出流

兴宁区13451436749: java编程,spring里ioc和aop用什么原理实现的 -
赧邓唯他: 控制反转(IOC)(理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”) 1、Ioc—Inversion of Control:即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味...

兴宁区13451436749: Spring中的ioc和aop有什么作用?为什么要用ioc和aop?面试中多次被问到,求一个详细 清晰的解答... -
赧邓唯他: 还是需要去了解,多看看书! IOC:控制反转,是一种设计模式.一层含义是控制权的转移:由传统的在程序中控制依赖转移到由容器来控制;第二层是依赖注入:将相互依赖的对象分离,在spring配置文件中描述他们的依赖关系.他们的依赖关系只在使用的时候才建立.简单来说就是不需要NEW一个对象了. AOP:面向切面,是一种编程思想,OOP的延续.将系统中非核心的业务提取出来,进行单独处理.比如事务、日志和安全等.这个简单来说就是可以在一段程序之前或者之后做一些事. Spring 的AOP和IOC都是为了解决系统代码耦合度过高的问题.使代码重用度高、易于维护. 不过AOP和IOC并不是spring中特有的,只是spring把他们应用的更灵活方便

兴宁区13451436749: java.io java.lang java.util是什么? -
赧邓唯他: 是java的类库,每种类型的类封装在不同的包中,你如果用到其中的类的话需要用import 语句导入那些类,java.lang包系统默认自动导入到程序中的,所以你不用手动的导入它.我们也可以把自己做的类用package语句打成包,再用import语句导入到其它的程序中.不过要设置一下classpath路径.如果你不明白的话别加我Q277468687

兴宁区13451436749: Spring 中的 IOC 到底是怎么实现的?实现的类是怎么销毁的了? -
赧邓唯他: 实现类是怎么销毁的...看你这问题问的,刚学spring吧?刚学没必要深究,等你真正用了也就明白了,我可以稍微给你说一下:IOC 控制反转,也叫依赖注入,依赖注入或许容易理解点,按照面向对象的观点,假设有一个对象 A ,...

兴宁区13451436749: 谁能说说java框架spring的ioc和代理模式有什么关系?spring都哪里用了代理模式
赧邓唯他: Spring的IOC使用的是工厂模式,通过工厂容器解析配置文件中的bean,并创建实例,等有需要注入时,将bean实例set到类中. Spring的AOP使用的是动态代理模式.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网