`
CindyLiao
  • 浏览: 12572 次
  • 性别: 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框架的简单实现

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

    Spring框架文档 - 核心技术部分 中文版 - 第一部分.pdf

    Spring框架(Spring Framework)有自己的AOP框架,在概念上很容易理解,它成功地解决了Java企业编程中80%的AOP需求。 本文档也讲解Spring与AspectJ的集成,就特征而言,AspectJ是Java企业空间中目前最丰富的、最成熟...

    Spring框架文档 - 核心技术部分 中英双语版 第二部分.pdf

    Spring框架(Spring Framework)有自己的AOP框架,在概念上很容易理解,它成功地解决了Java企业编程中80%的AOP需求。 本文档也讲解Spring与AspectJ的集成,就特征而言,AspectJ是Java企业空间中目前最丰富的、最成熟...

    Spring框架文档 - 核心技术部分 中文版 - 第二部分.pdf

    Spring框架(Spring Framework)有自己的AOP框架,在概念上很容易理解,它成功地解决了Java企业编程中80%的AOP需求。 本文档也讲解Spring与AspectJ的集成,就特征而言,AspectJ是Java企业空间中目前最丰富的、最成熟...

    spring ioc+mvc代码

    自己实现的spring ioc+mvc框架,具体流程参考的spring,可以加深对spring源码流程的理解

    SpringIoC的简单实现

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

    手写IOC项目,学习理解Spring IOC原理

    我们都知道,Spring框架的IOC是基于Java的反射机制实现,实现IOC,必须掌握反射的实践方法。Java反射机制是在运行状态中,对于任意类,都能够知道这个类的属性和方法;对于任何一个对象,都能够调用它的任意方法和...

    Spring框架文档 - 核心技术部分 中英双语版 第一部分.pdf

    Spring框架(Spring Framework)有自己的AOP框架,在概念上很容易理解,它成功地解决了Java企业编程中80%的AOP需求。 本文档也讲解Spring与AspectJ的集成,就特征而言,AspectJ是Java企业空间中目前最丰富的、最成熟...

    深入解析Java Spring框架

    Java Spring框架作为企业级应用的首选框架之一,承载着广泛的开发任务。本文将全方位探讨Java Spring框架,包括基本介绍、个人心得、实际项目经验分享以及相关深度练习。 一、Java Spring框架介绍 1.1 概述 Java ...

    2024 Java Spring框架入门心得与实战经验分享.zip

    作者以通俗易懂的语言,介绍了Spring框架的核心概念,如IoC(控制反转)、AOP(面向切面编程)等,并分享了自己在实际项目中使用Spring框架的经验和心得。 适用人群:这篇文章适用于所有对Java Spring框架感兴趣的人...

    关于spring的AOP ,IOC,DI的理解

    帮助初学者理解spring框架,有助于提高代码能力java.sql.SQLException: Duplicate entry '2' for key 'PRIMARY' Query: insert into transaction values(?,?,?,?,?) Parameters: [2, 6212999999999, 转出, 6000000, ...

    深入解析Spring IoC源码:核心机制与实践应用

    透过这些分析,本文不仅为Java开发者提供了对Spring IoC更深层次的理解,也为高效利用Spring框架提供了实践指导。适合拥有一定Spring框架基础的开发者阅读,特别是那些希望深入理解框架内部工作原理的高级开发人员。

    一步步实现Spring框架(一)项目搭建

    自己来实现Spring框架原理,也好加强对Java的理解 博客地址:http://my.oschina.net/u/865381/blog/225649

    自己动手写的类似spring框架

    上课时给学生讲spring课的例子,自己手工开发的类似spring的框架,只实现了ioc的功能,比较简单容易理解,分享给想学习spring底层原理的朋友

    深入理解Java的Spring框架中的IOC容器

    IOC(Inversion of Control,控制反转)是Spring框架的核心,负责控制对象的生命周期与关系,接下来就让我们跟随文章来深入理解Java的Spring框架中的IOC容器:

    深入解析Spring IoC:源码与实践指南

    Spring框架的核心在于其强大的IoC(控制反转)机制,该机制为Java应用...这些深入的分析不仅有助于理解Spring的内部工作机制,而且对于Java开发者来说,能够更好地掌握如何有效地使用Spring框架进行高效的编程实践。

    spring ioc aop基础理论实践笔记

    1,spring是一个开源的免费的框架(容器)。 2,spring是一个轻量级的,非入侵式的框架。 ​ 非入侵式:就是项目引入了这个框架之后,...总结:spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架。

    初步理解 Spring IOC 思想

    最近跟着B站的狂神学习了Spring的大概,以前有过写传统JavaWeb的经验,现在也算是进阶学习框架吧,这篇博客主要记录一下Spirng中的两个重要思想之一——IOC,控制反转 大体思想 在开发的过程中,当体量较小时,用户...

    spring中文教程

    Spring是IOC为核心的,所以第一步就是要深刻理解IOC,最好是能尽快把IOC作为教条式的原则,虽然有些偏激,但有助于尽快理解,在你有了深刻的理解之后,你再看Spring就已经有个大概框架了,虽然IOC从定义来讲并不...

    Spring.net框架

    在Step3到Step5的例子中,我们将利用Spring.net提供的Ioc框架,轻松完 成解耦以及系统改造等工作。 一、类之间的依赖 我们的第一个例子主要用于说明程序的基本构造,并且作为一个反面典型,引出为什么要解耦,以及...

Global site tag (gtag.js) - Google Analytics