什么是spring?

Spring是一个从实际项目开发经验中抽取的,可高度重用的应用框架。
Spring是一个轻量级容器,它所带的包装器使许多不同的服务和框架更易于使用。轻量级容器接受任何JavaBean,而不是只接受特定类型的组件。

spring框架结构组成

spring框架各个模块介绍

Spring Core:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。
BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
Context:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。

Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。

Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。

Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。

Spring Web :Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。

Spring MVC :MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

spring的实现

1,采用了IoC使代码对Spring的依赖减少 ,
2,Spring将管理的Bean作为POJO(Plain Old Java Object)进行控制 
3,Spring的组件就是普通的Java Bean ,
4,单元测试可以不再依赖容器 
5,组件的初始化和管理均由Spring完成 ,
6,配置文件中声明各种关系

两种spring容器类型:

1. BeanFactory:(org.springframework.beans.factory.BeanFactory接口定义)是最简答的容器,提供了基本的DI支持。最常用的BeanFactory实现就是XmlBeanFactory类,它根据XML文件中的定义加载beans,该容器从XML文件读取配置元数据并用它去创建一个完全配置的系统或应用。 

2. ApplicationContext应用上下文:(org.springframework.context.ApplicationContext)基于BeanFactory之上构建,并提供面向应用的服务。

spring的核心:控制反转 (IOC)和面向切面(AOP)

IOC提炼

Inversion of Control, 一般分为两种类型:依赖注入DI(Dependency Injection)和依赖查找(Dependency Lookup).依赖注入应用比较广泛。
Spring IOC负责创建对象,管理对象(DI),装配对象,配置对象,并且管理这些对象的整个生命周期。
优点:把应用的代码量降到最低。容器测试,最小的代价和最小的侵入性使松散耦合得以实现。IOC容器支持加载服务时的饿汉式初始化和懒加载。 
DI依赖注入是IOC的一个方面,是个通常的概念,它有多种解释。这概念是说你不用床架对象,而只需要描述它如何被创建。你不在代码里直接组装你的组件和服务,但是要在配置文件里描述组件需要哪些服务,之后一个IOC容器辅助把他们组装起来。 
IOC的注入方式:1. 构造器依赖注入;2. Setter方法注入。

AOP提炼

切面(aspect):一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关注点的很好的例子。
连接点(Joinpoint):程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。在Spring AOP中,一个连接点总是表示一个方法的执行。
通知(advice):在切面的某个特定的连接点上执行的动作。其中包括了“around”、“before”和“after”等不同类型的通知。
切入点(Pointcut):匹配连接点的断言。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行(例如,当执行某个特定名称的方法时)。切入点表达式如何和连接点匹配,是AOP的核心。
引入(introduction):为类添加新方法和属性。
目标对象(Target Object): 被一个或者多个切面所通知的对象。也被称做被通知(advised)对象。
AOP代理(AOP Proxy):AOP框架创建的对象,用来实现切面契约(例如通知方法执行等等)。
织入(Weaving):把切面连接到其它的应用程序类型或者对象上,并创建一个被通知的对象。这些可以在编译时(例如使用AspectJ编译器),类加载时和运行时完成。

Bean的生命周期

1,创建Bean的实例(factory-method, autowireConstrutor) 
2),属性注入(autowireByName, autowireByType) 
3,初始化Bean

a,激活Aware方法:(invokeAwaresMethods)Spring中提供了一些Aware相关接口,比如BeanNameAware, BeanFactoryAware, ApplicationContextAware等,实现这些Aware接口的bean在被初始化之后,可以取得一些相对应的资源。

private void invokeAwareMethods(final String beanName, final Object bean){if(bean instanceof Aware){if(bean instanceof BeanNameAware){((BeanNameAware) bean).setBeanName(beanName);}if(bean instanceof BeanClassLoaderAware){((BeanClassLoaderAware) bean).setBeanClassLoader(getBeanClassLoader());}if(bean instanceof BeanFactoryAware){((BeanFactoryAware) bean).setBeanFactory(AbstactAutowire CapableBeanFactory.this);}}
}

b,处理器的应用(BeanPostProcessor接口):调用客户自定义初始化方法前以及调用自定义初始化方法后分别会调用BeanPostProcessor的postProcessBeforeInitialization和postProcessAfterInitialization方法,使用户可以根据自己的业务需求进行响应的处理。 
c, 激活自定义的init方法(init-method & 自定义实现InitializingBean接口)

protected Object initializeBean(final String beanName, final Object bean, RootBeanDefinetion mbd){if(System.getSecurityManager() != null){AccessController.doPrivileged(new PrivilegedAction<Object>(){@Overridepublic Object run(){invokeAwareMethods(beanName,bean);return null;}});}else{invokeAwareMethods(beanName,bean);}Object wrappedBean = bean;if(mbd == null !! !mbd.isSynthetic()){wrappedBean = applyBeanPostProcessorsBeforeInitialization(wappedBean,beanName);}try{invokeInitMethods(beanName, wappedBean, mbd);}catch(Throwable ex){throw new BeanCreationException((mbd != null ? mbd.getResourceDescription():null),beanName,"Invocation of init method failed",ex);}if(mbd == null || !mbd.isSynthetic()){wrappedBean = applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);}return wappedBean;
}

d,使用Bean。 驻留在应用的上下文中,直到该应用上下文被销毁。 
e,销毁(destory-mthod & 实现DisposableBean接口)

springMVC工作流程

1.

用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获

2.

DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回

3.

DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)

4.

提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:

HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息

数据转换:对请求消息进行数据转换。如String转换成Integer、Double等

数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等

数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中

5.

Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象

6.

根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet

7.

ViewResolver 结合Model和View,来渲染视图,并将渲染结果返回给客户端

1,Spring依赖注入的两种方式(根据实例解):
http://blog.csdn.net/weixin_36380516/article/details/72301260
2,

spring之Bean的生命周期:

http://blog.csdn.net/weixin_36380516/article/details/72354668

3,spring框架中Bean的基本属性及调用外部properties等配置文件的方法介绍:

http://blog.csdn.net/weixin_36380516/article/details/72426357

4,Spring AOP中的前置通知和后置通知详解
http://blog.csdn.net/weixin_36380516/article/details/72551678
更新于05/17,持续更新...
5, spring中定时器的使用:
http://blog.csdn.net/weixin_36380516/article/details/72596834
6,spring所有开源项目(github):
https://github.com/spring-projects
7,spring官方文档:
http://spring.io/docs/reference
更新于05/24,持续更新...
8,Spring整合Struts2和Hibernate的Demo:
http://blog.csdn.net/weixin_36380516/article/details/72722424
9,Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别
http://blog.csdn.net/weixin_36380516/article/details/72829361
更新于06/02...

spring知识点概述相关推荐

  1. Spring知识点记录

    Spring知识点 1. Spring简介(此章略过) 1.1 Spring概述 1.2 Spring家族 1.3 Spring Framework 2. IOC 2.1 IOC容器 2.2 基于XM ...

  2. 80%以上Javaer可能不知道的一个Spring知识点

    点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 来源:字节观 关注我,回复口令获取可获取独家整理的学习资料: - 001 :领取<Spring ...

  3. 1、spring的概述

    1.spring的概述 spring是什么     spring的两大核心     spring的发展历程和优势     spring体系结构 spring是什么 Spring 是分层的 Java S ...

  4. Spring AOP概述及底层实现原理

    Spring AOP概述及底层实现原理 aop概述 AOP全称为Aspect Oriented Programming的缩写,意为:面向切面编程.将程序中公用代码进行抽离,通过动态代理实现程序功能的统 ...

  5. [Spring5]Spring框架概述

    Spring框架概述 1.Spring是轻量级的开源的JavaEE框架 2.Spring可以解决企业应用开发的复杂性 3.Spring有两个核心部分:IOC和Aop a.IOC:控制反转,把创建对象过 ...

  6. Spring框架概述(快速入门)

    Spring 框架概述: 目录 Spring 框架概述: 1.Spring 是轻量级的开源的 javaEE 框架 2.Spring 有两个核心部分:IOC 和 AOP: 3.Spirng 特点: 4. ...

  7. (转)Spring的概述

    http://blog.csdn.net/yerenyuan_pku/article/details/69663685 Spring的概述 什么是Spring 据度娘所载: Spring是一个开源框架 ...

  8. Spring知识点总结-3

    Spring知识点总结-3:拦截 http://tianya23.blog.51cto.com/1081650/417035 http://tianya23.blog.51cto.com/108165 ...

  9. Spring Boot概述与入门特点配置方式注入方式yim配置文件与多文件配置Spring Boot自动配置原理lombok应用

    1. Spring Boot概述 Spring Boot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品: 首页Spring Boot简介可以 ...

最新文章

  1. SQL语句中不同的连接JOIN
  2. php在线打开pdf文件
  3. Python zmq的三种简单模式
  4. www.pythonchanlleges.com
  5. c语言中赋予从2开始的偶数,2013年计算机二级C语言上机试题三十二及答案
  6. kettle插入更新流程
  7. 剑指offer——二进制中1的个数(c++)
  8. STM32F4 HAL 库开发报错:Hal_StatusTypeDef is undefined的解决办法
  9. ARIMA模型之疏系数模型
  10. Diskpart命令安装系统小结
  11. odbc驱动程序配置失败_如何使用ODBC驱动程序配置链接服务器
  12. 二十七、K8s最小服务漏洞1-PSP
  13. rustdesk:远控工具说明
  14. [圣诞大礼][android控]平板电脑HD精品游戏软件合集
  15. 机器学习面试知识点总结
  16. python爬取虾米音乐_【个人】爬虫实践,利用xpath方式爬取数据之爬取虾米音乐排行榜...
  17. Unity-- Gfx.WaitForPresentOnGfxThread占用CPU过高导致帧率低
  18. 企业微信2020年翻倍增长背后:更新27个版本、迭代1000多次
  19. connect ETIMEDOUT......
  20. iPhone X(iOS 14.6)在Win 10上使用iRemoval PRO v5.1.2进行越狱

热门文章

  1. 马斯克光顾北京包子铺被偶遇 本人盖章:好吃!
  2. 手机满足不了华为 华为拟在年底前发布带5G的8K电视!
  3. 贝叶斯网络的应用实例一
  4. 晨哥真有料丨宁缺毋滥会等来一个很好的人吗?
  5. c#正则表达式取出数据库中带html标签的内容,C#用正则表达式 获取网页源代码标签的属性或值...
  6. 音视频开发基础(二)常用的直播协议
  7. 非常实用的安卓第三方库
  8. Unity3D研究院之获取摄像机的视口区域(转)
  9. 如何做一个国产数据库(六) 网络传输 nodejs做测试客户端
  10. php中调用go代码,php中的goto的用法实例(代码)