面试:Spirng、AOP、IOC

Spring 是什么?
Spring 是一个轻量级的IoC 和AOP 容器框架。是为Java 应用程序提供基础
性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需
求。常见的配置方式有三种:基于XML 的配置、基于注解的配置、基于Java 的配置。
主要由以下几个模块组成:
Spring Core:核心类库,提供IOC 服务;
Spring Context:提供框架式的Bean 访问方式,以及企业级功能(JNDI、定时任
务等);
Spring AOP:AOP 服务;
Spring DAO:对JDBC 的抽象,简化了数据访问异常的处理;
Spring ORM:对现有的ORM 框架的支持;
Spring Web:提供了基本的面向Web 的综合特性,例如多方文件上传;
Spring MVC:提供面向Web 应用的Model-View-Controller 实现。
2.Spring 的优点?
(1)spring 属于低侵入式设计,代码的污染极低;
(2)spring 的DI 机制将对象之间的依赖关系交由框架处理,减低组件的耦合性;
(3)Spring 提供了AOP 技术,支持将一些通用任务,如安全、事务、日志、权
限等进行集中式管理,从而提供更好的复用。
(4)spring 对于主流的应用框架提供了集成支持。
3、Spring 的AOP 理解?
OOP 面向对象,允许开发者定义纵向的关系,但并适用于定义横向的关系,导致了
大量代码的重复,而不利于各个模块的重用。
AOP,一般称为面向切面,作为面向对象的一种补充,用于将那些与业务无关,但
却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命
名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了
系统的可维护性。可用于权限认证、日志、事务处理。
AOP 实现的关键在于代理模式,AOP 代理主要分为静态代理和动态代理。静态代
理的代表为AspectJ;动态代理则以Spring AOP 为代表。
(1)AspectJ 是静态代理的增强,所谓静态代理,就是AOP 框架会在编译阶段生
成AOP 代理类,因此也称为编译时增强,他会在编译阶段将AspectJ(切面)织入到Java 字
节码中,运行的时候就是增强之后的AOP 对象。
(2)Spring AOP 使用的动态代理,所谓的动态代理就是说AOP 框架不会去修改
字节码,而是每次运行时在内存中临时为方法生成一个AOP 对象,这个AOP 对象包含了
目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。
Spring AOP 中的动态代理主要有两种方式,JDK 动态代理和CGLIB 动态代理:
①JDK 动态代理只提供接口的代理,不支持类的代理。核心
InvocationHandler 接口和Proxy 类,InvocationHandler 通过invoke()方法反射来调用
目标类中的代码,动态地将横切逻辑和业务编织在一起;接着,Proxy 利用
InvocationHandler 动态创建一个符合某一接口的的实例, 生成目标类的代理对象。
②如果代理类没有实现InvocationHandler 接口,那么Spring AOP 会选择
使用CGLIB 来动态代理目标类。CGLIB(Code Generation Library),是一个代码生成的
类库,可以在运行时动态的生成指定类的一个子类对象,并覆盖其中特定方法并添加增强代
码,从而实现AOP。CGLIB 是通过继承的方式做的动态代理,因此如果某个类被标记为final,
那么它是无法使用CGLIB 做动态代理的。
4、Spring 的IoC 理解?
(1)IOC 就是控制反转,是指创建对象的控制权的转移,以前创建对象的主动权
和时机是由自己把控的,而现在这种权力转移到Spring 容器中,并由容器根据配置文件去
创建实例和管理各个实例之间的依赖关系,对象与对象之间松散耦合,也利于功能的复用。
DI 依赖注入,和控制反转是同一个概念的不同角度的描述,即应用程序在运行时依赖IoC
容器来动态注入对象需要的外部资源。
(2)最直观的表达就是,IOC 让对象的创建不用去new 了,可以由spring 自动
生产,使用java 的反射机制,根据配置文件在运行时动态的去创建对象以及管理对象,并
调用对象的方法的。
5、Spring 的IOC 有三种注入方式
Spring 的IOC 有三种注入方式:构造器注入、setter 方法注入、根据注解注入。
6、请解释Spring Bean 的生命周期?
首先说一下Servlet 的生命周期:实例化,初始init,接收请求service,销毁
destroy;
Spring 上下文中的Bean 生命周期也类似,如下:
(1)实例化Bean:
对于BeanFa

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值