`
CindyLiao
  • 浏览: 13114 次
  • 性别: Icon_minigender_2
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Spring框架的个人理解之IOC

阅读更多

 1、对于spring的理解

spring是个开源的框架,那什么是框架呢,框架又有什么用呢?它有什么有优点和缺点呢?

它的适用场景是什么呢?

框架这个东西我觉得就像是个半成品的软件,不过这个半成品的软件是你的软件的架构基础,就像一座房子的框架,一般来说总是先会把这个房子的设计的结构搭起来,然后什么外形的颜色是装饰完全由你自己之后再去添加,这也有点像装饰器模式,或者说是多态之中最上层的类,吸血鬼始祖,人的骨架是一样的但是外形怎样呢还是要看内部基因和粉刷了哈哈……

框架的作用也就不言而喻了,spring的框架的定位大概就像是类似我们的房间设计都是几室加几厅这种已经成为一种经典了。当然框架和建筑这种的类比并不是完全恰当的,因为在软件里面是留有很多API的,当这某种性能不符合你的要求的时候可以很方便的去扩展。最不相同的是软件架构的一个原则是对修改关闭和对扩展开放。

而使用现成的框架的好处就更不用说了而且还是免费的,不仅大大缩短了软件的开发周期,架构的设计也特别棒。

Spring团队列举出的优点:

1、非侵入性框架,使得目标程序对于框架的依赖最小化,应用程序可以在没有spring或者其它容器的情况下运行。

2、一致性编程模型,使应用直接使用POJO开发,从而可以与运行环境隔离开来。

3、spring推动应用程序面向对象以及面向接口编程转变,提高代码的可重用性和可测性

4、改进了体系结构的选择,spring可以和很多其他的架构集成和封装,例如S2SH,当然SpringMVC也有自己的实现对于数据的持久化以及WebUI层。



spring的不足:

个人觉得用框架开发确实是能解决很多业务上重复的东西,但是会让人太过于依赖框架,而不知道底层的实现机制是怎样的,而且对于开源代码别人很容易利用这个框架的漏洞来攻击你的网站。

吴老师的安全书里面就有提到web框架安全问题以及springMVC命令执行漏洞的问题

spring security为springMVC提供了很多安全机制,但是缺乏XSS、CSRF等问题的解决方案。

由于spring框架可以根据客户端所提供的值来更新对象的值,所以这也会导致攻击者修改class.classloader加载对象的类加载器的属性,就有可能执行任意命令。



Spring两大核心IOC依赖反转和AOP面向切面编程

IOC容器是Spring最核心的模块, IOC的两个主要容器系列。

1、实现BeanFactory接口的简单容器系列,这系列容器只实现了容器最基本的功能。

2、实现ApplicationContext应用上下文,它作为容器的高级形态而存在。应用上下文在简单容器的基础上,增加了许多面向框架的特性,同时对应用环境作了许多适配。

IOC的接口图





 

1、从接口beanFactory到HierarchicalBeanFactory再到ConfigurableBeanFactory是主要的BeanFactory设计路径。BeanFactory定义了基本的IoC容器的规范。

HIerarchicalBeanFactory中增加了getParentBeanFactory()的接口功能,使得BeanFactory具备了双亲IoC容器的管理功能。

ConfigurableBeanFactory 主要定义了一些对BeanFactory的配置功能

2、从BeanFactory到ListableBeanFactory在到ApplicationContext再到常用的WebApplicationContext或者ConfigurableApplication。常用的应用上下文基本上都是WebApplicationContext或ConfigurableApplication的实现。

在ListableBeanFactory接口中细化了许多BeanFactory的功能,而ApplicationContext实现了MessageSource、ResourceLoader和ApplicationEventPublisher等接口,在BeanFactory简单IOC容器中添加了许多高级容器的特性的支持,使其更加适应与应用上下文。



IOC容器初始化的过程

分为三步第一步:Resource定位也就是对于beanDefinition的定位

             第二步:BeanDefinition载入,先通过Xml的解析其得到document对象,完成通用Xml解析后再按照Spring的bean的规则进行解析。最后再完成BeanDefinition的处理。

            第三部:向容器中注入这些BeanDefinition。通过BeanDefinitionRegistry接口实现将BeanDefinition注入到HashMap中,IOC容器通过HashMap来持有这些BeanDefinition数据

IOC容器初始化的过程不包括bean的依赖注入,Bean的载入和依赖注入是两个独立的过程。



IOC的依赖注入

依赖注入一般是发生在应用第一次通过getBean向容器索取Bean的时候,当然也可以对属性lazyinit来实现预实例化配置。在上面IOC的接口图中可以看到BeanFactory中有getBean()接口的定义,这个接口的实现就是触发依赖注入的地方。

1、第一步是根据BeanDefinition生成Bean

getBean—调用—>createBean——>bean对象根据BeanDefinition定义生成——>之后还会有些属性初始化。

bean对象的实例化方法分两种方式,一种是BeanUtils利用JVM的反射,说到JVM的反射其实就是通过类本身来获取类的信息和动态调用类的方法的一种机制。另一种则是通过CGLIB的Enhaner类来完成

2、第二步则是解析bean的依赖关系后实现真正的注入

 参考资料:Spring技术内幕

  • 大小: 43.3 KB
分享到:
评论

相关推荐

    关于spring框架中的ioc的幽默解释.

    这是Spring框架中常用的依赖注入方式之一,Girl类定义了一个setKissable方法,允许外部容器为其注入Kissable接口的实现。 4. **IoC Type 3**:通过构造器注入Boy对象。这也是Spring框架支持的一种依赖注入方式,...

    Spring框架中的ioc的幽默解释

    Spring 框架中的 IoC(Inversion of Control,控制反转)是一种重要的设计模式,它改变了传统程序设计中对象创建和管理的方式。IoC 的核心思想是将对象的实例化和依赖关系的管理从对象自身剥离出来,交给一个外部的...

    springIoc实现原理

    Spring Ioc(Inversion of Control,控制反转)是Spring框架的核心特性之一,它改变了传统应用程序中对象的创建和管理方式。在传统的软件设计中,对象的创建和依赖关系的维护通常由代码自身来完成,而在Spring Ioc中...

    02-01-07-用30个类高仿真提炼纯手写Spring框架V2.0之IOC与DI1

    Spring框架的核心特性之一是控制反转(Inversion of Control,简称IOC)和依赖注入(Dependency Injection,简称DI)。这两个概念在软件设计中起到了至关重要的作用,它们帮助开发者降低了组件之间的耦合度,提高了...

    Spring框架的简单实现

    我们从一个简单的容器开始,一步步的重构,最后实现一个基本的Spring框架的雏形,为了帮助我们更加深入的理解Spring的IoC的原理和源码。 详细内容见博文: 【SSH进阶之路】一步步重构容器实现Spring框架——从一个...

    Spring整合Mybatis+SpringIOC

    在IT行业中,Spring框架是Java开发中的一个基石,它提供了丰富的功能来简化应用程序的构建,包括依赖注入(DI)和面向切面编程(AOP)。而Mybatis则是一个轻量级的持久层框架,它专注于SQL映射和数据库操作。将这两...

    spring ioc

    Spring 是一个广泛应用的 Java 应用开发框架,其核心特性之一就是IOC,它极大地简化了软件组件之间的依赖管理。在本文中,我们将深入探讨 Spring IOC 的概念、工作原理以及如何在实际项目中应用。 首先,理解 IOC ...

    Spring源码分析_Spring_IOC

    ### Spring源码分析_Spring_IOC:深入理解Spring的IOC容器机制 #### 基本概念与核心作用 ...通过深入理解IOC容器的创建与初始化流程,开发者能够更好地利用Spring框架,构建高效、可维护的应用系统。

    Spring框架IoC和AOPJar包

    Spring框架是Java开发中广泛应用的一个轻量级框架,它的核心特性包括依赖注入(IoC,Inversion of Control)和面向切面编程(AOP,Aspect Oriented Programming)。这两个概念是理解Spring工作原理的关键。 **依赖...

    以注解方式模拟Spring IoC AOP

    依赖注入是Spring框架的核心特性之一,它通过反转对象创建和管理的控制权,使得应用程序组件之间的耦合度降低。在Spring中,通常通过以下三种注解实现IoC: - `@Autowired`:自动装配,Spring会根据类型或名称找到...

    实现ioc功能的spring框架

    通过这个项目,你可以深入理解 Spring 框架的工作原理,学习如何构建和扩展一个 IoC 容器,这对于提升 Java 开发技能和对软件设计模式的理解非常有益。同时,这也将有助于你在实际项目中更好地利用 Spring 框架,...

    Spring之IOC示例

    控制反转(IOC)是Spring框架的核心设计理念,它将对象的创建和管理权从代码中剥离出来,交由Spring容器负责。这样做的好处是解耦了应用代码与对象的生命周期管理,使得程序更易于测试和维护。 Spring实现IOC的方式...

    springioc和spring aop

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

    Spring框架Jar包里面有ioc、aop、mvc、dao、orm几项

    Spring框架是Java开发中最常用的轻量级开源框架之一,它为开发者提供了强大的依赖注入(IOC)、面向切面编程(AOP)、模型视图控制器(MVC)、数据访问/对象关系映射(DAO/ORM)等功能。以下是这些核心概念的详细...

    java 解析xml,模拟spring框架ioc

    在Java编程领域,Spring框架是应用最广泛的轻量级框架之一,它以其强大的依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect Oriented Programming,简称AOP)功能而闻名。本教程将深入探讨如何模拟...

    Spring核心学习IOC部分

    在Spring框架中,IOC(Inversion of Control,控制反转)是其核心概念之一,它改变了传统应用程序中的对象创建和管理方式。本学习资料主要聚焦于Spring的IOC容器,特别是从最基本的BeanFactory开始,逐步深入理解...

    Spring框架IoC控制反转.pdf

    通过上述步骤,我们可以充分理解和利用Spring框架的IoC特性,构建松散耦合、易于维护和扩展的Java应用程序。同时,Spring还提供了其他许多功能,如AOP(面向切面编程)用于日志记录、事务管理等,以及数据访问、Web ...

    Spring框架小结

    Spring框架作为Java开发领域中最受欢迎的企业级应用程序框架之一,其核心特性包括控制反转(Inversion of Control, IoC)、依赖注入(Dependency Injection, DI)、面向切面编程(Aspect Oriented Programming, AOP...

    java spring框架学习资料 pdf

    《Java Spring框架学习指南》是一份详尽的教育资源,旨在帮助开发者从零基础开始逐步掌握Spring框架,并深入理解其核心概念和技术。这份PDF文档全面覆盖了Spring框架的基础知识,包括IoC(Inversion of Control)...

Global site tag (gtag.js) - Google Analytics