1.什么是1。春天?
Spring是一个开源框架,它是为了解决企业应用程序开发的复杂性而创建的。该框架的主要优势之一是它的分层体系结构,允许您选择使用哪个组件,并为J2EE应用程序开发提供了一个集成框架。
2.2有什么特点。春天?
(1)控制反转或依赖注入
明确定义组件的接口,独立开发每个组件,然后根据组件的依赖关系组装运行;赋予Spring容器创建和管理对象的权利。Spring是一个轻量级的容器,它的核心是Bean工厂,用来构造我们需要的M(Model)。它可以保持协作的软件组件松散耦合。它降低了业务对象替换的复杂性,并改善了组件之间的解耦。
(2)面向部分的编程
一种通过预编译和运行时动态代理,在不修改源代码的情况下,动态、统一地向程序添加函数的技术。也就是说,系统级服务与代码是分离的。例如,日志记录、性能统计、安全控制、事务处理和异常处理等代码与业务逻辑代码是分开的。允许您在整个应用程序中分离功能,以形成可重用的组件。
3.3有什么好处。Spring框架?
(1)控制反转:Spring通过控制反转实现松耦合,对象给出自己的依赖关系,而不是创建或寻找依赖对象。
(2)面向方面编程(AOP):Spring支持面向方面编程,将应用业务逻辑从系统服务中分离出来。
(3)MVC框架:Spring的Web框架是一个设计良好的框架,是WEB框架的很好的替代品。
(4)低侵入设计:代码污染极低,独立于各种应用服务器,基于Spring框架的应用能够真正实现一次写入,随处运行的承诺。
(5)强大的集成能力:集成各种优秀的开源框架。(Hibernate、Struts、Hessian等。).
(6)异常处理:Spring提供了方便的API,可以将特定的与技术相关的异常(如JDBC和Hibernate或JDO抛出的异常)转换为一致的未检查异常。
(7)容器:Spring包含并管理应用程序中对象的生命周期和配置。
(8)轻量级:Spring是轻量级的,基本版本在2MB左右。
4.4的基本组成部分。春天?
(1)corecontre模块:Core、bean、上下文和表达式语言。
(2)数据访问/集成模块:JDBC、ORM、OXM、JMS、事务。
(3)Web模块:Web、Web-Servle、Web-Struts和Web-Portlet。
(4)AOP、方面、仪器、测试。
//加载应用程序上下文class path xmlaplicationcontext context=new class path xmlaplicationcontext(' class path : sprint . XML ');//get bean user user=context . getbean(' user ');5.详细说明5。弹簧芯部件
Spring只有三个核心组件:核心、上下文和Beans。核心包侧重于帮助类和操作工具,而bean包侧重于bean实例的描述。上下文更注重全局控制,函数是派生出来的。
5.1Bean组件
Bean组件主要解决Bean定义、Bean创建和Bean解析的问题。
开发人员关心Bean的创建,其余的由Spring为您完成。
(1)Bean创建是一种典型的工厂模式,其顶部界面是BeanFactory。下图显示了该工厂的继承层次结构:
豆厂的传承关系
BeanFactory有三个子类:ListableBeanFactory、HierarchicalBeanFactory和
AutowireCapableBeanFactory .但是最终的默认实现类是DefaultListableBeanFactory。实现多个接口的目的是为了区分Spring中操作对象传递和转换时对对象数据访问的限制。
例如,ListableBeanFactory接口指示这些bean是可列表的,HierarchicalBeanFactory指示这些bean具有
继承关系的,也就是每个 Bean 有可能有父 Bean。AutowireCapableBeanFactory 接口定义 Bean 的自动装配规则。这四个接口共同定义了 Bean 的集合、Bean 之间的关系、以及 Bean 行为。
(2)Bean 的定义主要有 BeanDefinition 描述,如下图说明了这些类的层次关系:
Bean 定义的类层次关系图
Bean 的定义就是完整的描述了在 Spring 的配置文件中你定义的节点中所有的信息,包括各种子节点。当 Spring 成功解析你定义的一个节点后,在 Spring 的内部他就被转化成 BeanDefinition 对象。以后所有的操作都是对这个对象完成的。
(3)bean 的解析过程非常复杂,功能被分得很细,因为这里需要被扩展的地方很多,必须保证有足够的灵活性,以应对可能的变化。Bean 的解析主要就是对 Spring 配置文件的解析。这个解析过程主要通过下图中的类完成:
Bean解析类
5.2Content组件
Context 在 Spring 的
org.springframework.context 包下,给 Spring 提供一个运行时的环境,用以保存各个对象的状态。
ApplicationContext 是 Context 的顶级父类,他除了能标识一个应用环境的基本信息外,他还继承了五个接口,这五个接口主要是扩展了 Context 的功能。下面是 Context 的类结构图:
从上图中可以看出 ApplicationContext 继承了 BeanFactory,这也说明了 Spring 容器中运行的主体对象是 Bean,另外 ApplicationContext 继承了 ResourceLoader 接口,使得 ApplicationContext 可以访问到任何外部资源,这将在 Core 中详细说明。
ApplicationContext 的子类主要包含两个方面:
ConfigurableApplicationContext 表示该 Context 是可修改的,也就是在构建 Context 中用户可以动态添加或修改已有的配置信息,它下面又有多个子类,其中最经常使用的是可更新的 Context,即 AbstractRefreshableApplicationContext 类。 WebApplicationContext 顾名思义,就是为 web 准备的 Context 他可以直接访问到 ServletContext,通常情况下,这个接口使用的少。
再往下分就是按照构建 Context 的文件类型,接着就是访问 Context 的方式。这样一级一级构成了完整的 Context 等级层次。
总结:
总体来说 ApplicationContext 必须要完成以下几件事:
标识一个应用环境。 利用 BeanFactory 创建 Bean 对象。 保存对象关系表。 能够捕获各种事件。
Context 作为 Spring 的 Ioc 容器,基本上整合了 Spring 的大部分功能,或者说是大部分功能的基础。
5.3Core组件
Core 组件作为 Spring 的核心组件,他其中包含了很多的关键类,其中一个重要组成部分就是定义了资源的访问方式。这种把所有资源都抽象成一个接口的方式很值得在以后的设计中拿来学习。
从下图可以看出 Resource 接口封装了各种可能的资源类型,也就是对使用者来说屏蔽了文件类型的不同。对资源的提供者来说,如何把资源包装起来交给其他人用这也是一个问题,我们看到:
Resource 相关的类结构图
从上图可以看出 Resource 接口封装了各种可能的资源类型,也就是对使用者来说屏蔽了文件类型的不同。对资源的提供者来说,如何把资源包装起来交给其他人用这也是一个问题,我们看到:
屏蔽资源提供者:Resource 接口继承了 InputStreamSource 接口,这个接口中有个 getInputStream 方法,返回的是 InputStream 类。这样所有的资源都被可以通过 InputStream 这个类来获取,所以也屏蔽了资源的提供者。 资源加载:ResourceLoader 接口完成加载,他屏蔽了所有的资源加载者的差异,只需要实现这个接口就可以加载所有的资源,他的默认实现是 DefaultResourceLoader。
Resource与Context如何建立联系:
从上图可以看出,Context 是把资源的加载、解析和描述工作委托给了 ResourcePatternResolver 类来完成,他相当于一个接头人,他把资源的加载、解析和资源的定义整合在一起便于其他组件使用。Core 组件中还有很多类似的方式。
6.Spring初始化逻辑(流程)? 附录 1. 应用上下文加载类:
(1)应用上下文(Application Context)
负责装载bean的定义,并把它们组装起来,即装载配置文件。Spring应用上下文全权负责对象的组装。spring自带多种应用上下文的实现,它们之间的区别仅仅在于如何加载配置。
若Spring采用的是xml配置,则选择
ClassPathXMLApplicationContext作为应用上下文比较合适。而对于基于java的配置,Spring提供了AnnotationConfigApplicationContext.加载应用上下文:
(2)Spring自带了多种类型的应用上下文。
a、
AnnotationConfigApplicationContext:从一个或多个基于Java配置类中加载Spring应用上下文。
b、
AnnotationConfigWebApplicationContext:从一个或多个基于java的配置类中加载Spring Web应用上下文。
c、
ClassPathXmlApplicationContext:从类路径下的一个或多个xml配置文件中加载上下文定义,把应用上下文定义文件作为类资源。
d、
FileSystemXMLApplicationContext:从文件系统下的一个或多个xml配置文件中加载上下文定义。
e、xmlWebApplicationContext:从Web应用的一个或多个xml配置文件中加载上下文定义。
//加载应用上下文的几种方式示例 //基于xml的配置 ClassPathXmlApplicationContextcontext=newClassPathXmlApplicationContext(“classpath:spring.xml”); //基于java的配置
AnnotaitionConfigApplicationContext context=newAnnotationConfigApplicationContext(“com.star.config.KnightConfig.class”); 应用上下文准备就绪之后,我们就可以调用上下文的getBean()方法从Spring容器中获取bean。
2.BeanFactory 工厂创建
(1)这个方法就是构建整个 Ioc 容器过程的完整的代码,了解了里面的每一行代码基本上就了解大部分 Spring 的原理和功能了。
这段代码主要包含这样几个步骤:
构建 BeanFactory,以便于产生所需的“演员”。 注册可能感兴趣的事件。 创建 Bean 实例对象。 触发被监听的事件。
(2)refresh 也就是刷新配置,前面介绍了 Context 有可更新的子类,这里正是实现这个功能,当 BeanFactory 已存在是就更新,如果没有就新创建。
下一篇 鬼吹灯拍了几部电视剧
免责声明:本站所展示信息均由会员自行提供,会员依法应对其提供的任何信息承担全部责任,本网站对此不承担任何责任。为保障您的利益,请注意可能的风险安全!