Spring面试知识点总结

什么是Spring
------开源的,控制反转(Inversion of Control)和面向切面的容器框架。
Spring核心:
IOC(控制反转)-------创建对象并且组装对象之间的关系。
IOC:应用程序本身不负责依赖对象的创建和维护,依赖对象的创建和维护是由外部容器负责的。这样控制权就由应用程序转移到了外部容器。控制权的转移就是所谓的反转。

依赖注入:Dependency Injection:在运行时由外部容器将依赖对象注入到组件中。

 

为什么使用Spring
1:降低组件之间的耦合度,实现各层之间的解耦
2:可以使用容器提供的众多服务。如:
--事务管理服务
--JMS
--Spring core核心服务
--持久化服务
--其他
3:提供了单例模式支持。开发人员不需要自己编写实现代码
4:提供了AOP技术。实现如:权限拦截,运行监控等功能
5:提供了众多的辅助类。如JDBC Template,HIbernate Template
6:对主流的应用框架提供了集成支持。集成Struts,JPA,Hibernate

 

spring的7个模块

spring核心容器(Core)

spring上下文

springAOP

SpringDAO

SpringORM

springWeb支持struts集成

springMVC自带的mvc框架

 

 

 

spring实现的2种设计模式

单态模式:接受容器管理的bean,默认采用单态模式管理。

工厂模式:spring就是实例化和管理全部bean的工厂。spring的上下文也就是工厂,也被设计成单态的

 

spring的依赖注入(也叫控制反转Ioc)实现策略有3种

 

依赖查找

依赖注入:接口注入(如Context.lookup)、构造注入、设置值注入。

 

注:利用反射来实现的。

 

设置值注入优点

与javabean类似,直观、自然、不臃肿、

 

构造注入优点

决定注入顺序

缺点:臃肿

 

IOC容器优缺点

优点:实现对象的热插拔。

缺点:步骤复杂、利用反射使效率损耗、缺少IDE重构支持。

 

 

 

 

 

 

spring容器:BeanFactory和ApplicationContext

之间是父子的关系

 

 

Spring实例化bean的三种方式
1:默认使用类加载器
2:使用静态工厂方法实例化bean对象
<bean id="名称" class="工厂类" factory-method="工厂类中创建bean实例的方法"/>
3:使用实例工厂方法实例化bena对象
<bean id="实例工厂名称" class="工厂类的路径"/>
<bean id="名称"  factory-bean="实例工厂名称" method="实例工厂里边的创建bena对象的方法"/>

Spring管理的bean的作用域
Spring生成的bean默认为单实例。singleton。
如果需要每次调用Spring的getBean方法就创建一个 bean的实例,可指定bean的属性scope="prototype"

还有:request、session、global session 这3个一般基于web的spring ApplicationContext情形下有效。

 

Spring的生命周期
bean的实例化:
1:当作用域范围为singleton时,在初始化Spring容易的时候实例化bean实例。
---1:如果lazy-init的值为true,则为延迟bean的实例化,即在Spring容器启动时不实例化bean的对象
2:当作用域范围为prototype时,在调用Spring的getBean的方法时实例化bean对象

注入依赖对象可以采用手工装配或者自动装配,在实际应用中建议采用手工装配。因为自动装配会产生未知情况,开发人员无法预见最终的装配结果。

 

 

加载spring有2种方式(略)

 

 

bean的属性

id                       命名bean

class                  实例化的类

factory-method  指定工厂方法

factory-bean     指定工厂类

scope                指定bean的作用域

depends-on      指定依赖bean

lazy-init             延迟初始化bean

init-method        初始化回调

destory-method  析构回调

parent              继承bean

 

bean的子元素

<property>子元素

直接value属性、使用子<value>、使用<ref>子元素指向另一个bean

此外property还可以包含集合:<list> <set>  <map>  <props>他们分别对应List Set  Map  Properties的值

 

<constructor-arg>子元素

用type指定参数类型、value指定输入参数的值

用ref属性指定其他的bean

使用<ref>子元素指向另一个bean

 

 

springAOP

 

AOP 是一个概念,一个规范,本身并没有设定具体语言的实现,这实际上提供了非常广阔的发展的空间。AspectJ是AOP的一个很悠久的实现,它能够和 Java 配合起来使用。

 

AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。 
 

 

      AspectJ 中几个必须要了解的概念:

  Aspect: Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。

  Joint point(连接点):表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point。

  Pointcut(切入点):表示一组 joint point,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。

  Advice(通知):Advice 定义了在 pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和 around 来区别是在每个 joint point 之前、之后还是代替执行的代码。

 

注:如果没有实现接口,需要引入cglib


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值