Spring基本解析

spring是一个轻量级的Ioc和Aop容器框架,是为java应用程序提供基础服务的一套框架,目的是用于简化企业应用程序的开发,使得开发者只需要关心业务需求,常见的配置方式有三种:基于xml的配置,基于注解的配置,基于java的配置

1、spring Core核心模块

      是Spring的核心容器,它实现了IOC模式 ,提供给了Spring框架的基础功能,此模块中包含的BeanFactory类是Spring的核心类,负责JavaBean的配置与管理。它采用Factore模式实现了IOC即依赖注入。

2、Context模块

      Spring Context模块集成BeanFactore类,并且添加了事务处理,国际化,资源装载以及数据校验等功能,它还提供了框架式的Bean的访问方式和很多企业级的功能。

3、AOP模块

      Spring集成了AOP的功能,通过事务管理可以使任意Spring管理的对象AOP化,Spring提供了用标准java语言编写的AOP框架。

4、DAO模块

      DAO模式思想是将业务逻辑代码与数据库交互代码分离,降低俩者的耦合度。通过DAO模式可以使结构变得更为清晰,代码更为简洁。DAO模块提供了JDBC的抽象层,简化了数据库厂商的异常错误。大幅度减少代码的编写,并且提供了对声明式事务和编程式事务的支持

5、ORM映射模块

     提供了对现有ORM框架的支持,各种流行的ORM框架已经非常的成熟,对Hibernate提供了完美的整合共,同时也支持其他ORM工具。

6、WEB模块

    该模块简历在Spring Context基础之上,它提供了Servlet监听器Context和web应用的上下文。对现有的web框架提供了集成。

7、MVC模块

    MVC框架是一个全功能的构建Web应用程序的MVC实现。通过策略接口,MVC框架变成为高度可配置的。MVC容纳了大量视图技术,其中包括JSP、POI等,模型来有JavaBean来构成,存放于m当中,而视图是一个街口,负责实现模型,控制器表示逻辑代码,由c的事情。Spring框架的功能可以用在任何J2EE服务器当中,大多数功能也适用于不受管理的环境。Spring的核心要点就是支持不绑定到特定J2EE服务的可重用业务和数据的访问的对象,毫无疑问这样的对象可以在不同的J2EE环境,独立应用程序和测试环境之间重用

Spring的优点

 1、spring的DI机制将对象之间的依赖关系交给框架处理,减低组件的耦合度

 2、spring提供了AOP技术,支持一些将通用的任务,如安全,权限,事务,日志进行集中式管理

 3、spring对主流的应用框架提供了集成的支持

 4、支持声明式事务处理,只需要通过配置就可以完成对事务的管理,无需手动编程

BeanFactory和FactoryBean的区别?

BeabFactory是一个Factory,也就是IOC容器对象或对象工厂,FactoryBean是个Bean对象,在spring中所有的Bean都是由BeanFactory来进行管理的,但对于FactoryBean,是一个能生产或者修饰对象生成的工厂bean 

BeanFactory和ApplicationContext的区别?

这俩者都可以当作Spring的容器,其中ApplicationContext是BeanFactory的子接口

BeanFactory:是spring中最底层的接口,包含了各种bean的定义,读取bean的配置文档,管理bean的加载实例化,控制bean的生命周期,维护bean之间的依赖关系,ApplicationContext接口作为BeanFactory的子类,除了这些功能之外,还提供了更完整的框架功能:

继承MessageSource,支持国际化

统一的资源文件访问方式

提供在监听器中注册bean的事件

同时加载多个配置文件

BeanFactory采用的是延迟加载形式来注入bean对象,即只有在使用到某个bean调用getBean()的方法,才对该bean进行加载实例化

ApplicationContext是在容器一启动的时候,一次性创建了所有的bean,不过相对于BeanFactory,唯一的不足是占用内存空间,当应用程序配置bean较多的时候,程序启动会比较慢

Spring Bean的生命周期

1、实例化bean

对于BeanFactory容器,当客户向容器请求一个尚未初始化的bean时候,或者初始化bean的时候需要注入另一个尚未初始化的依赖,容器就会调用createBean进行实例化,对于ApplicationContext容器,当容器启动结束后,通过获取BeanDefinition对象中的信息实例化所有的bean

2、设置对象属性,依赖注入

实例化后的对象被封装在BeanWrapper对象中,紧接着,Spring根据BeanDefinition中的信息,以及通过BeanWrapper提供的设置属性的接口,完成依赖注入

3、处理Aware接口

解释spring支持的几种bean作用域

 Spring容器中的bean可以分为5个范围:

(1)singleton:默认,每个容器中只有一个bean的实例,单例的模式由BeanFactory自身来维护。

(2)prototype:为每一个bean请求提供一个实例。

(3)request:为每一个网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。

(4)session:与request范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效。

(5)global-session:全局作用域,global-session和Portlet应用相关。当你的应用部署在Portlet容器中工作时,它包含很多portlet。如果你想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中。全局作用域与Servlet中的session作用域效果相同。

Spring中Aop原理解析

AOP面向切面,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生应用的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块即是切面,减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性

AOP的实现关键在于代理模式,分为静态代理和动态代理,静态代理的代表为AspectJ;动态代理则以Spring  AOP为代表           (1)AspectJ是静态代理的增强,所谓静态代理,就是AOP框架会在编译阶段生成AOP代理类,因此也称为编译时增强,他会在编译阶段将AspectJ(切面)织入到Java字节码中,运行的时候就是增强之后的AOP对象。

(2)Spring AOP使用的动态代理,所谓的动态代理就是说AOP框架不会去修改字节码,而是每次运行时在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。
动态代理实现方式:JDK动态代理和Cglib动态代理

JDK动态代理只提供接口的代理,不支持类的代理,核心InvocationHandler接口和Proxy类,InvocationHandler通过Invoke()方法反射来调用目标类中的代码,动态的将横切逻辑和业务代码编制在一起,Proxy利用InvocationHandler动态创建一个符合某一接口的实例,生成目标类的代理对象

Cglib动态代理在运行时态会动态的生成一个目标类的子类对象,并覆盖其中的特定方法并添加增强代码,从而实现aop,cglib是通过继承的方式实现的动态代理,如何某个类被标记为final,那么它是无法使用cglib做动态代理的

AOP的一些专业名词

切面: 被抽取的公共模块,横切多个对象,在spring aop中,切面可以使用通用类或者在普通类中以@AspectJ注解来实现

连接点:指方法,需要增强的方法

通知:在切面的某个特定的连接点上执行的动作,通知有多种类型,包括around,before,after等通知

(1)前置通知(Before advice):在某连接点(join point)之前执行的通知,但这个通知不能阻止连接点前的执行(除非它抛出一个异常)。

(2)返回后通知(After returning advice):在某连接点(join point)正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回。 

(3)抛出异常后通知(After throwing advice):在方法抛出异常退出时执行的通知。 

(4)后通知(After (finally) advice):当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。 

(5)环绕通知(Around Advice):包围一个连接点(join point)的通知,如方法调用。这是最强大的一种通知类型。 环绕通知可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行。 环绕通知是最常用的一种通知类型。大部分基于拦截的AOP框架,例如Nanning和JBoss4,都只提供环绕通知。 

切入点:对那些连接点进行拦截的定义,通过切入点的表达式,指定拦截的方法

引入:

目标对象:被一个或者多个切面所通知的对象

织入:把增强应用到目标对象来创建新得代理对象得过程叫做织入

Spring中IOC的理解

1、IOC就是控制反转指创建对象的控制权转移,以前创建对象的主动权和时机是由自己把控的,而现在这种权力转移到spring容器之后,并由容器根据配置文件去创建实例和管理各个实例之间的依赖关系,对象与对象之间的松散耦合,利于功能的复用,DI的依赖注入和控制反转是同一个概念。即应用程序在运行时依赖ioc容器来动态的注入对象需要的外部资源.统一bean的构建,自动维护bean的依赖关系

spring的ioc有三种注入方式:构造器注入,setter方法注入,注解注入

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值