Spring

1 Spring是什么?

Spring 是一个轻量级的框架,它包括IOC和AOP,是为java程序应用提供的基础性的服务框架,主要是用来简化应用程序的开发.

他有几个核心的模块

Spring core : 核心类库 ,提供了IOC 服务

Spring context: 提供了框架式的Bean访问方式,以及企业级功能(定时任务)

Spring AOP:aop服务

Spring DAO: 提供了JDBC的抽象封装,简化了数据访问异常的处理

Spring ORM: 提供了对现有的ORM框架的支持

Spring web:提供了基础的相面web的综合特性,文件上传

2 Spring的优点

  • spring属于侵入式设计,对代码的污染比较低
  • spring的DI机制,将对象之间的依赖关系交给框架去处理,降低组件的耦合性
  • springAOP提供了AOP 技术,支持一些通用的任务,如安全,事务,和日志,权限等集中管理,从而提供更好的复用.
  • spring对主流的框架提供了集成支持

3 springAOP的理解

AOP介绍

一般称为面向切面,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个重用的模块,这个模块命名为切面(Aspect),减少系统中的重复代码,降低模块间的耦合度,同时提高了系统的可维护性,可用于权限认证,日志,事务处理

AOP的实现关键

AOP的实现关键AOP得动态代理

Spring AOP使用的动态代理

springAOP是面向切面编程,是对面向对象的一种补充,用于系统分布于各个模块横切的关注点,主要有两种代理方式JDK和cglib代理,JDK代理必须是实现接口类,因为是通过反射来实现的,核心类是InvocationHandler 和proxy. 但是cglib代理是在运行时生产某个类的子类,然后覆盖其中的特定的方法并且添加增加代码。所以cglib代理是通过继承的动态代理.如果有个类被标记为final,name就不能是要cglib代理.

3.1 AOP能做什么?
  • 降低模块之间的耦合度
  • 使系统容易扩展
  • 更好的代码复用。
3.2 AOP怎么用的?
  • 前置通知(Before advice) :在某连接点(JoinPoint)之前执行的通知,但这个通知不能阻止连接点前的执行。ApplicationContext中在aop:aspect里面使用aop:before元素进行声明。
  • 后通知(After advice) :当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。ApplicationContext中在aop:aspect里面使用aop:after元素进行声明。
  • 返回后通知(After return advice) :在某连接点正常完成后执行的通知,不包括抛出异常的情况。ApplicationContext中在aop:aspect里面使用元素进行声明。
  • 环绕通知(Around advice) :包围一个连接点的通知,类似Web中Servlet规范中的Filter的doFilter方法。可以在方法的调用前后完成自定义的行为,也可以选择不执行。ApplicationContext中在aop:aspect里面使用aop:around元素进行声明。
  • 抛出异常后通知(After throwing advice) : 在方法抛出异常退出时执行的通知。 ApplicationContext中在aop:aspect里面使用aop:after-throwing元素进行声明。
  • 切入点表达式 :如execution(* com.spring.service..(…))

4 spring IOC的理解

1 IOC就是控制反转,就是创建对象的转移,以前创建对象的主动权和时机是由自己把控的,而现在这种权利转移到spring容器中去,并且容器根据配置文件去创建实例和管理各个实例之间的依赖关系,对象与对象之间的松耦合,有利于功能的复用,DI依赖注入,和控制反转是同一个概念的不同角度的描述,即程序在运行的时候依赖ioc容易可以随时的注入需要的对象

2 直观表达:IOC让对象的创建不用自己去new,可以让spring自动生成,使用java的反射机制,根据配置文件在运行时动态的创建对象以及去管理对象,

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

总结:ioc让相互协作的组件保存松散,而aop编程允许你把应用层的功能分离出来形成可重用的功能组件

5 BeanFactory和ApplicationContext有什么区别?

BeanFactory和ApplicationContext都是两大核心的接口,都可以当做spring的容器.其中ApplicationContext是BeanFactory的子接口.

  • 1 BeanFactory:是spring里面最底层的接口,包含了Bean的加载,和实例化,控制bean的生命周期,维护了bena之间的依赖关系。ApplicationContext接口作为BeanFactory的派生,提供了BeanFactory所具有的功能外,还提供了更加完整的框架功能。

①继承MessageSource,因此支持国际化。

②统一的资源文件访问方式。

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

④同时加载多个配置文件。

⑤载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层。

  • ①BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化这样,我们就不能发现一些存在的Spring的配置问题。如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常。
  • ApplicationContext,它是在容器启动时,一次性创建了所有的Bean,在容器启动时,我们就可以发现Spring中存在的配置错误,这样有利于检查所依赖属性是否注入。 ApplicationContext启动后预载入所有的单实例Bean,通过预载入单实例bean ,确保当你需要的时候,你就不用等待,因为它们已经创建好了。
  • 相对于基本的BeanFactory,ApplicationContext 唯一的不足是占用内存空间。当应用程序配置Bean较多时,程序启动较慢。

6 请解释一下spring bean的生命周期

servlet的生命周期:实例化,初始化init,接受请求的service,销毁destory

servlet生命周期,的三个方法,1.被创建,执行且只执行一次init方法,2.提供服务,执行service方法,执行多次 3.被销毁,当Servlet服务器正常关闭时,执行destroy方法,只执行一次。

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

7.1 singleton :默认,为每个容器创建一个bena的实例,容器初始化就创建好了。

生命周期:

  • 对象创建:当应用加载,创建容器时候,对象就被创建了
  • 对象运行:只要容器在,对象一直活着
  • 对象销毁:当应用卸载,销毁容器时,对象就被销毁了

**7.2 prototype:**多例, ioc容器可以创建多个Bean,每次返回都是一个新的实例

实例化多个

  • 对象创建:当使用对象时,创建新的对象实例
  • 对象运行:只要对象一直在使用中,就一直活着
  • 对象销毁:当对象长时间不用时,被java的垃圾回收器收回了

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

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

8、Spring框架中的单例Beans是线程安全的么?

spring框架并没有对单例bean进行任何多线程的封装处理,关于单例bean的线程安全和并发访问问题需要开发者自己去搞定。

9、Spring如何处理线程并发问题?

10.1 spring基于xml注入的几种方式

  • set注入
  • 构造器注入
  • 静态工厂注入
  • 实例工厂注入
10.2 Spring的自动装配:

在spring中,对象无需自己查找或创建与其关联的其他对象,由容器负责把需要相互协作的对象引用赋予各个对象,使autowire来配置自动装载模式。

注:@Autowired和@Resource之间的区别

(1) @Autowired默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在(可以设置它required属性为false)。

(2) @Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入

11、Spring 框架中都用到了哪些设计模式?

  • 工厂模式 各个BeanFacroty 以及ApplicationContext 创建对象,创建对象需要大量的重复代码,通过子类实现方法来创建对象
  • 模板模式 各个BeanFacroty 以及ApplicationContext 创建对象,
  • 代理模式 AOP的Jdk的动态代理
  • 单例模式 创建Bean
  • 观察者模式 ContextLoadLIstenter监听器来监听创建spring容器的时候,三要素事件,事件源,监听器------事件源servletcontext对象,事件:创建 监听器ContextLoadLIstenter
  • 适配器模式 spring-framwork提供了 spring mvc 的开发包,。

12、Spring事务的实现方式和实现原理:

本身spring是支持事务的,

Spring分编程式事务和声明式事务,一般编程式事务用的少,声明式事务管理:将我们从复杂的处理中解脱出来,获取连接,关闭连接.事务提交.回滚.异常处理都不需要自己去操作,spring帮我们处理.

声明式事务管理介绍:

使用aop面向切面编程实现的,本质是在目标方法前后进行拦截.在目标方法执行前加入或者创建一个事务.在执行方法后,根据实际的情况提交或者回滚事务.

声明式事务管理优点

不需要再业务逻辑代码中掺杂事务管理的代码,只需要带配置文件中做相关的事务规则声明就可用了或者@Transactional注解的方式,便可以将事务规则应用到业务逻辑中。

声明式事务管理优配置方式:

xml配置,@Transactional,事务注解驱动tx:annotation-driven

声明式事务管理缺点

最细粒度只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别。

12.2 spring的事务传播行为:

7中事务的传播行为,常见的就两种

① PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。

② PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。

12.3 Spring中的隔离级别

ISOLATION_DEFAULT:这是PlatfromTransactionManager 默认的隔离级别,使用数据库默认的事务隔离级别

② ISOLATION_READ_UNCOMMITTED:读未提交,允许另外一个事务可以看到这个事务未提交的数据。

③ ISOLATION_READ_COMMITTED:读已提交,保证一个事务修改的数据提交后才能被另一事务读取,而且能看到该事务对已有记录的更新。

④ ISOLATION_REPEATABLE_READ:可重复读,保证一个事务修改的数据提交后才能被另一事务读取,但是不能看到该事务对已有记录的更新。

⑤ ISOLATION_SERIALIZABLE:串行化,一个事务在执行的过程中完全看不到其他事务对数据库所做的更新

13 Spring框架中有哪些不同类型的事件?

14 解释一下Spring AOP里面的几个名词

  • 切面(Aspect):可以由多个切点和多个通知组成
  • peoxy(代理):一个类被AOP织入增强后,产生一个结果代理
  • 切点(PointCut):指定哪些方法需要拦截
  • 通知(adivce):具体的代码增强
  • 被代理的对象(Target):
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值