SPRING面试知识点

在传统的程序设计中,当调用者需要被调用者的协助时,通常由调用者来创建被调用者的实例。但在spring里创建被调用者的工作不再由调用者来完成,因此控制反转(IoC);创建被调用者实例的工作通常由spring容器来完成,然后注入调用者,因此也被称为依赖注入(DI),依赖注入和控制反转是同一个概念。
1.指定id,必须在Ioc容器中唯一;
2.指定name,这样name就是“标识符”,必须在Ioc容器中唯一;
3.指定id和name,id就是标识符,而name就是别名,必须在Ioc容器中唯一;
4.指定多个name,多个name用“,”、“;”、“ ”分割,第一个被用作标识符,其他的(alias1、alias2、
alias3)是别名,所有标识符也必须在Ioc容器中唯一;
5.使用<alias>标签指定别名,别名也必须在IoC容器中唯一
Spring IoC容器如何实例化Bean
一、使用构造器实例化Bean
  使用空构造器进行定义,使用此种方式,class属性指定的类必须有空构造器。
  使用有参数构造器进行定义,使用此中方式,可以使用< constructor-arg >标签指定构造器参数值,其中index表示位
置,value表示常量值,也可以指定引用,指定引用使用ref来引用另一个Bean定义,使用标签constructor-arg。
二、使用静态工厂方式实例化Bean,使用这种方式除了指定必须的class属性,还要指定factory-method属性来指定实
例化Bean的方法,而且使用静态工厂方法也允许指定方法参数,spring IoC容器将调用此属性指定的方法来获取
Bean,
三、使用实例工厂方法实例化Bean,使用这种方式不能指定class属性,此时必须使用factory-bean属性来指定工厂
Bean,factory-method属性指定实例化Bean的方法,而且使用实例工厂方法允许指定方法参数,方式和使用构造器方
式一样。
●谁依赖于谁:当然是应用程序依赖于IoC容器;
●为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;
●谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;
●注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。
Spring IoC容器注入依赖资源主要有以下两种基本实现方式:
构造器注入:就是容器实例化Bean时注入那些依赖,通过在在Bean定义中指定构造器参数进行注入依赖,包括实例
工厂方法参数注入依赖,但静态工厂方法参数不允许注入依赖;
setter注入:通过setter方法进行注入依赖;
方法注入:能通过配置方式替换掉Bean方法,也就是通过配置改变Bean方法 功能。
除了最基本配置方式以外,Spring还提供了另外两种更高级的配置方式,<ref local=””/>和<ref parent=””/>
(1)<ref local=””/>配置方式:用于引用通过<bean id=”beanName”>方式中通过id属性指定的Bean,
它能利用XML解析器的验证功能在读取配置文件时来验证引用的Bean是否存在。
2)<ref parent=””/>配置方式:用于引用父容器中的Bean,不会引用当前容器中的Bean,当然父容器中的
Bean和当前容器的Bean是可以重名的,获取顺序是先查找当前容器中的Bean,如果找不到再从父容器找。
Spring通过<null/>标签注入null值。
对于“singleton”作用域Bean,可以通过“setAllowCircularReferences(false);”来禁用循环引用:
自动装配
目前Spring3.0支持“no”、“byName ”、“byType”、“constructor”四种自动装配,默认是“no”指不支
持自动装配的,其中Spring3.0已不推荐使用之前版本的“autodetect”自动装配,推荐使用Java 5+支持的
(@Autowired)注解方式代替。

一、default:表示使用默认的自动装配,默认的自动装配需要在<beans>标签中使用default-autowire属性指定。

二、no:意思是不支持自动装配,必须明确指定依赖。

三、byName:通过设置Bean定义属性autowire="byName",意思是根据名字进行自动装配,只能用于setter注入。

四、“byType”:通过设置Bean定义属性autowire="byType",意思是指根据类型注入,用于setter注入。

五、“constructor”:通过设置Bean定义属性autowire="constructor",功能和“byType”功能一样,根据类型注入构造器参数,只是用于构造器注入方式。

六、autodetect:自动检测是使用“constructor”还是“byType”自动装配方式,已不推荐使用。

依赖检查有none、simple、object、all四种方式

一、none:默认方式,表示不检查;

二、objects:检查除基本类型外的依赖对象,配置方式为:dependency-check="objects",

三、simple:对基本类型进行依赖检查,包括数组类型,其他依赖不报错;配置方式为:dependencycheck="simple"。

四、all:对所以类型进行依赖检查,配置方式为:dependency-check="all"。

所谓方法注入其实就是通过配置方式覆盖或拦截指定的方法,通常通过代理模式实现。Spring提供两种方法注入:查找方法注入和方法替换注入。

Spring是通过CGLIB动态代理方式实现方法注入,也就是通过动态修改类的字节码来实现的,本质就是生成需方法注入的类的子类方式实现。

一、查找方法注入:又称为Lookup方法注入,用于注入方法返回结果,也就是说能通过配置方式替换方法返回结果;使用<lookup-method name="方法名" bean="bean名字"/>配置。

二、替换方法注入:也叫“MethodReplacer”注入,和查找注入方法不一样的是,他主要用来替换方法体。通过
首先定义一个MethodReplacer接口实现。

Bean的作用域

Spring提供“singleton”和“prototype”两种基本作用域,另外提供“request”、“session”、“global
session”三种web作用域;Spring还允许用户定制自己的作用域。

一、request作用域:表示每个请求需要容器创建一个全新Bean。

二、session作用域:表示每个会话需要容器创建一个全新Bean。

三、globalSession:类似于session作用域,只是其用于portlet环境的web应用。

AspectJ切入点语法详解,(太多了,另起炉灶记录吧)

1: 描述一下你如何理解Spring的ApplicationContext对象的?
2:Spring beans的默认范围(scope)是什么?举例说明两个其他两个范围(scope)?
3: 解释一下依赖注入(dependency injection),Spring的两种依赖注入都是什么?
4:对于Spring beans的客户端代码,有必要调用Spring beans必须要实现的接口吗?说明为什么?
5:描述一个应用AOP的案例。
6:列举说明多种AOP point-cut。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值