IOC和AOP以及spring框架的的面试题

Spring的概述
     Spring 是完全面向接口的设计,降低程序耦合性,主要是事务控制并创建bean实例对象。在ssh整合时,充当黏合剂的作用。IOC(Inversion of Control) 控制反转/依赖注入,又称DI(Dependency Injection) (依赖注入)  

IOC的作用:产生对象实例,所以它是基于工厂设计模式的

Spring IOC的注入

    通过属性进行注入,通过构造函数进行注入,

    注入对象数组     注入List集合   

    注入Map集合      注入Properties类型

 Spring IOC 自动绑定模式:

          可以设置autowire按以下方式进行绑定

             按byType只要类型一致会自动寻找,            

                     按byName自动按属性名称进行自动查找匹配.

AOP 面向方面(切面)编程

AOP是OOP的延续,是Aspect Oriented Programming的缩写,

    意思是面向方面(切面)编程。

注:OOP(Object-Oriented Programming ) 面向对象编程

 AOP  主要应用于日志记录,性能统计,安全控制,事务处理(项目中使用的)等方面。

 Spring中实现AOP技术:

     在Spring中可以通过代理模式来实现AOP

     代理模式分为:

           静态代理:一个接口,分别有一个真实实现和一个代理实现。

           动态代理:通过代理类的代理,接口和实现类之间可以不直接发生联系,而             可以在运行期(Runtime)实现动态关联。

    动态代理有两种实现方式,可以通过jdk的动态代理实现也可以通过cglib

    来实现而AOP默认是通过jdk的动态代理来实现的。jdk的动态代理必须要有

    接口的支持,而cglib不需要,它是基于类的。

String 类的常用方法都有那些?
a、indexOf():返回指定字符的索引。b、charAt():返回指定索引处的字符。  c、replace():字符串替换。

d、trim():去除字符串两端空白。

e、split():分割字符串,返回一个分割后的字符串数组。    f、getBytes():返回字符串的 byte 类型数组。

g、length():返回字符串长度。

h、toLowerCase():将字符串转成小写字母。    i、toUpperCase():将字符串转成大写字符。g、substring():截取字符串。

k、equals():字符串比较。

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

a、singleton : bean在每个Spring ioc 容器中只有一个实例。b、prototype:一个bean的定义可以有多个实例。

c、request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。

d、session:在一个HTTP   Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring    ApplicationContext情形下有效。

e、global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

缺省的Spring bean 的作用域是Singleton

Spring的 IOC和AOP机制 ?
(1)我们是在使用 Spring框架的过程中,其实就是为了使用 IOC(控制反转)、依赖注入(DI与IOC一样)和AOP(面向切面编程),这两个也是 Spring 的灵魂。

(2)主要用到的设计模式有工厂模式和代理模式

IOC就是典型的工厂模式,AOP就是典型的代理模式的体现。

 代理模式是常用的Java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。

(3)Spring的 IoC容器是 Spring的核心,Spring AOP是 Spring框架的重要组成部分。

IOC:控制反转:

      在传统的程序设计中,当调用者需要被调用者的协助时,通常由调用者来创建被调用者的实例。但在 Spring里创建被调用者的工作不再由调用者来完成,因此控制反转(IOC);创建被调用者实例的工作通常由 Spring容器来完成,然后注入调用者,因此也被称为依赖注入(DI),依赖注入和控制反转是同一个概念。

      面向切面编程(AOP)是以另一个角度来考虑程序结构,通过分析程序结构的关注点来完善面向对象编程(OOP)。OOP将应用程序分解成各个层次的对象,而AOP将程序分解成多个切面(切面就是要添加的非核心功能)。Spring AOP 只实现了方法级别的连接点,在J2EE应用中,AOP拦截到方法级别的操作就已经足够。在 Spring中,未来使 IoC方便地使用健壮、灵活的企业服务,需要利用 Spring AOP实现为IoC和企业服务之间建立联系。

      IOC控制反转也叫依赖注入。利用了工厂模式将对象交给容器管理,你只需要在 Spring 总配置文件中配置相应的bean,以及设置相关的属性,让 Spring容器来生成类的实例对象以及管理对象。在 Spring容器启动的时候,Spring会把你在配置文件中配置的 bean都初始化好(这里就会涉及到复杂的 bean 创建的生命周期),然后在你需要调用的时候,就把它已经初始化好的那些 bean 分配给你需要调用这些 bean的类(假设这个类名是A),分配的方法就是调用 A 的 setter方法来注入,而不需要你在A里面 new 这些 bean了。

依赖注入的方式有几种?各是什么?
构造器注入

    将被依赖对象通过构造函数的参数注入给依赖对象,并且在初始化对象的时候注入。

优点:对象初始化完成后便可获得可使用的对象。

缺点:
      ① 当需要注入的对象很多时,构造器参数列表将会很长;
      ② 不够灵活。若有多种注入方式,每种方式只需注入指定几个依赖,那么就需要提供多个重载的构造函数,麻烦

setter方法注入

   IoC Service Provider 通过调用成员变量提供的setter函数将被依赖对象注入给依赖类。

优点:灵活。可以选择性地注入需要的对象。

缺点:依赖对象初始化完成后由于尚未注入被依赖对象,因此还不能使用。

接口注入

 依赖类必须要实现指定的接口,然后实现该接口中的一个函数,该函数就是用于依赖注入。该函数的参数就是要注入的对象。

优点:接口注入中,接口的名字、函数的名字都不重要,只要保证函数的参数是要注入的对象类型即可。

缺点:侵入性太强,不建议使用。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值