`
zhsh5395
  • 浏览: 256 次
文章分类
社区版块
存档分类
最新评论

IOC和AOP

阅读更多

网上找了些资料总结下IOC和AOP

 

IOC控制反转(Inversion Of Control),依赖倒置的意思,

所谓依赖,从程序的角度看,就是比如A要调用B的方法,那么A就依赖于B,反正A要用到B,则A依赖于B。

所谓倒置,你必须理解如果不倒置,会怎么着,因为A必须要有B,才可以调用B,如果不倒置,意思就是 A主动获取B的实例:B b = new B(),这就是最简单的获取B实例的方法(当然还有各种设计模式可以帮助 你去获得B的实例,比如工厂、Locator等等),然后你就可以调用b对象了。

所以,不倒置,意味着A要主动获取B,才能使用B;到了这里,你就应该明白了倒置的意思了。倒置就是 A要调用B的话,A并不需要主动获取B,而是由其它人自动将B送上门来。

 

形象的举例就是:

 

 通常情况下,假如你有一天在家里口渴了,要喝水,那么你可以到你小区的小卖部去,告诉他们,

 你需要一瓶水,然后小卖部给你一瓶水!

 

 这本来没有太大问题,关键是如果小卖部很远,那么你必须知道:从你家如何到小卖部;小卖部里

 是否有你需要的水;你还要考虑是否开着车去;等等等等,也许有太多的问题要考虑了。也就是说,

 为了一瓶水,你还可能需要依赖于车等等这些交通工具或别的工具,问题是不是变得复杂了?那么如何解决这个问题呢?

 

 解决这个问题的方法很简单:小卖部提供送货上门服务,凡是小卖部的会员,你只要告知小卖部你需要什么,

 小卖部将主动把货物给你送上门来!这样一来,你只需要做两件事情,你就可以活得更加轻松自在:

 第一:向小卖部注册为会员

 第二:告诉小卖部你需要什么

 

 是不是和Spring的做法很类似呢?Spring就是小卖部,你就是A对象,水就是B对象

 第一:在Spring中声明一个类:A

第二:告诉Spring,A需要B

 

假设A是UserAction类,而B是UserService类

<bean id="userService" class="org.leadfar.service.UserService"/>
 <bean id="documentService" class="org.leadfar.service.DocumentService"/>
 <bean id="orgService" class="org.leadfar.service.OrgService"/>
 
 <bean id="userAction" class="org.leadfar.web.UserAction">
      <property name="userService" ref="userService"/>
 </bean>

 

 

在Spring这个商店(工厂)中,有很多对象/服务:userService,documentService,orgService,

也有很多会员:userAction等等,声明userAction需要userService即可,Spring将通过你给它提供的

通道主动把userService送上门来,因此UserAction的代码示例类似如下所示:

 

package org.leadfar.web;
 public class UserAction{
      private UserService userService;
      public String login(){
           userService.valifyUser(xxx);
      }
      public void setUserService(UserService userService){ 
           this.userService = userService;
      }
 }

 

 

在这段代码里面,你无需自己创建UserService对象(Spring作为背后无形的手,

把UserService对象通过你定义的setUserService()方法把它主动送给了你,这就叫依赖注入!)

 

Spring依赖注入的实现技术是:动态代理

 

---------------------------------------------------

再说说AOP,即面向切面编程,面向切面编程的目标就是分离关注点。什么是关注点呢,就是你要做的事,

就是关注点。假如你是个公子哥,没啥人生目标,天天就是衣来伸手,饭来张口,整天只知道玩一件事!

那么,每天你一睁眼,就光想着吃完饭就去玩(你必须要做的事),但是在玩之前,你还需要穿衣服、

穿鞋子、叠好被子、做饭等等等等事情,这些事情就是你的关注点,但是你只想吃饭然后玩,那么怎么办呢?

这些事情通通交给别人去干。在你走到饭桌之前,有一个专门的仆人A帮你穿衣服,仆人B帮你穿鞋子,仆人C

帮你叠好被子,仆人C帮你做饭,然后你就开始吃饭、去玩(这就是你一天的正事),你干完你的正事之后,

回来,然后一系列仆人又开始帮你干这个干那个,然后一天就结束了!

 

AOP的好处就是你只需要干你的正事,其它事情别人帮你干。也许有一天,你想裸奔,不想穿衣服,那么你把

仆人A解雇就是了!也许有一天,出门之前你还想带点钱,那么你再雇一个仆人D专门帮你干取钱的活!这就是

AOP。每个人各司其职,灵活组合,达到一种可配置的、可插拔的程序结构。

 

 从Spring的角度看,AOP最大的用途就在于提供了事务管理的能力。事务管理就是一个关注点,你的正事就是

 去访问数据库,而你不想管事务(太烦),所以,Spring在你访问数据库之前,自动帮你开启事务,当你访问

 数据库结束之后,自动帮你提交/回滚事务!

分享到:
评论

相关推荐

    spring ioc和aop原理流程图(详细)

    Spring 框架是Java开发中的核心框架,它主要由两个关键部分组成:IOC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)。这两个概念是Spring框架的核心特性,极大地简化了企业...

    SOA实践 -- 使用IoC和AOP重构SOA应用

    "SOA实践 -- 使用IoC和AOP重构SOA应用" 这个标题揭示了本文档将探讨面向服务架构(Service-Oriented Architecture, SOA)的实际运用,特别是在应用中如何利用控制反转(Inversion of Control, IoC)和面向切面编程...

    ioc和aop程序(maven)

    包括spring的ioc和aop,ioc是用比较流行的set注入方式,aop是用比较流行的xml配置方式。由于是maven项目,所以用普通java项目的话,需要把配置文件放到和程序一个目录下(src下),还要自己导入spring依赖的包。

    C#实现的IOC和AOP框架,供学习

    在现代软件开发中,依赖注入(IOC,Inversion of Control)和面向切面编程(AOP,Aspect-Oriented Programming)是两种非常重要的设计模式,它们有助于提高代码的可测试性、可维护性和模块化程度。这个名为...

    unity ioc 和 aop 简单示例

    Unity的IoC和AOP特性是.NET开发中强大的工具,尤其是在大型复杂项目中。理解并熟练掌握这些概念和实践,能够显著提升软件开发的效率和质量。通过深入学习UnityStudy中的示例,你可以更好地掌握这两个关键概念的实际...

    以注解方式模拟Spring IoC AOP

    在Spring框架中,依赖注入(Inversion of Control, IoC)和面向切面编程(Aspect Oriented Programming, AOP)是两大核心特性。本篇将深入探讨如何通过注解方式来模拟Spring的这两种机制,帮助你理解其底层原理。 #...

    IOC和AOP深刻理解基础代码测试

    在Java Web开发中,IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)是两个至关重要的概念,它们极大地提升了代码的灵活性和可维护性。Spring框架是实现这两种设计模式的...

    Spring中IOC和AOP的详细解释共1页.pdf.zi

    Spring框架是Java开发中最常用的轻量级框架之一,它的核心特性包括依赖注入(Inversion of Control,简称IOC)和面向切面编程(Aspect Oriented Programming,简称AOP)。这两个概念对于理解和使用Spring框架至关...

    spring ioc和aop讲解项目demo

    Spring框架是Java开发中不可或缺的一部分,它以其强大的依赖注入(IOC)和面向切面编程(AOP)功能而闻名。本项目"spring ioc和aop讲解项目demo"旨在通过实际操作来帮助开发者深入理解这两个核心概念。 首先,让...

    springioc和spring aop

    Spring框架是Java开发中不可或缺的一部分,它通过提供两种核心特性——控制反转(IoC)和面向切面编程(AOP)来简化应用的构建。理解并掌握这两种技术对于任何Java开发者来说都至关重要。 **控制反转(IoC)**,也...

    手写实现IoC和AOP开源架构源码2021.pdf

    标题:“手写实现IoC和AOP开源架构源码2021.pdf”隐含了两个核心概念:IoC(控制反转)和AOP(面向切面编程)。这两个概念是现代软件设计和开发中重要的设计原则和模式,尤其在企业级应用开发中尤为重要。 描述:...

    SpringIOC和AOP实现机制模拟

    Spring框架是Java开发中不可或缺的一部分,它通过提供控制反转(IOC)和面向切面编程(AOP)等核心特性,极大地简化了企业级应用的构建。让我们深入探讨这两个概念及其在Spring中的实现机制。 首先,Spring的控制...

    myeclipse spring IOC和AOP 例子

    Spring框架是Java开发中的核心组件,它通过控制反转(IOC)和面向切面编程(AOP)等特性,极大地简化了企业级应用的构建。在本教程中,我们将深入探讨这两个概念以及如何在MyEclipse环境中使用它们。下面将详细阐述...

    Java进阶之手写实现IoC和AOP共16页.pdf.zi

    在Java开发领域,IoC(Inversion of Control)和AOP(Aspect-Oriented Programming)是两个非常重要的概念,它们极大地提升了代码的可维护性和可扩展性。IoC,也称为依赖注入,是一种设计模式,它将对象的创建和管理...

    Spring IOC和AOP代码与笔记整理

    Spring框架是Java开发中不可或缺的一部分,它以IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为核心,极大地简化了企业级应用的开发工作。本篇将深入探讨Spring的这两...

    ioc和aop.md

    综上所述,IOC 和 AOP 是两种重要的软件设计模式和技术,它们有助于提高软件系统的可维护性、可扩展性和灵活性。在实际开发中,合理利用这两种技术能够帮助开发者更好地组织代码结构,降低系统复杂度,提高开发效率...

    spring之ioc和aop

    Spring框架是Java开发中的核心组件,它以Inversion of Control(IoC)和Aspect-Oriented Programming(AOP)两大核心理念为基础,极大地简化了企业级应用的开发工作。让我们一起深入探讨这两个重要概念。 **IoC...

    基于Java仿Spring实现简单的 IoC 和 AOP【100012181】

    本项目包含了两个不同版本的 IoC 和 AOP 实现,相关源码包结构如下: simple,包含了简单的 IoC 和 AOP 实现代码 IoC,包含了较为复杂的 IoC 实现代码 aop,包含了较为复杂的 AOP 实现代码

Global site tag (gtag.js) - Google Analytics