Java加pring面试题汇总

spring模块

一,什么是依赖注入,什么是控制反转(IOC),在spring中有几种依赖注入的方式

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。

把由程序代码操控的对象的调用权交给容器,通过容器实现对象组件的装配和管理。所谓的"控制反转"就是对组件对象控制权的转移,从程序代码本身转移到了外部容器,由容器来创建对象并管理对象之间的依赖关系。

其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)

依赖注入(DI)是spring核心,依赖注入早期叫反向控制,因为spring将类主动的加载依赖的对象的任务交给了容器负责,而类只需要使用这些类就行,

类也无需关心依赖对象的具体实现,实现了松耦合,方便进行模块测试。

注入方式:

构造函数注入。

set注入。

接口注入。

二,Spring中有几种配置bean的方式

基于XML的配置

基于注解的配置

基于java的配置

三。spring中一个bean的生命周期。

创建一个bean,首先需要实例化,然后设置属性值,设置bean的name,然后统通过一系列的初始化操作,bean就可以提供使用,当容器关闭时进行析构操作销毁bean。

这是beanFactory中简单bean的装配过程,若这个bean在spring的引用上下文中,则会在初始化的过程中,再调用一下setApplicationContext方法。

四,spring bean的作用。

spring中bean的作用域默认为单例的,singleton 。

prototype,与singleton相反,prototype是多例的,他为每一个bean请求单独创建一个实例

五,spring自动装配的几种方式

1.no,spring 的默认装配方式,在该方式下,spring的自动装配功能是关闭的。

2.byName:spring会自动寻找beanId与实例对象名称相同的的配置bean并自动注入,若没有则报错。

3,.byType:spring会自动寻找与实例对象类型相同的配置bean并自动注入,若没有则报错

4.constructor :构造器的自动装配和 byType 模式类似,但是仅仅适用于与有构造器相同参数的 bean ,如果在容器中没有找到与构造器参数类型一致的 bean ,那么将会抛出异常 。

5.autodetect:spring会自动测试构造器自动装配或者 byType 类型的自动装配

六,说说BeanFactory和applicationContext的区别

beanfactory是底层的实例化接口,他只能提供简单的注入的功能,applicationContext则更多的提供了企业级的服务

两者的区别:其中BeanFactory是延迟加载,也就是说知道代码中调用了getBean,bean才会被spring装配,

而applicationContext则在项目启动时,就会装载所有的bean。当然,applicationContext它还可以为 Bean 配置 lazy-init=true 来让 Bean 延迟实例化。

延迟实例化的优缺点

优点:启动时占用资源较少,对于占用资源相对较多的应用比较有优势。

缺点:速度会相对来说慢一些 。 而且有可能会出现空指针异常的错误,并且在项目启动时就加载bean方便更早的查找出bean的配置问题。

web应用推荐启动时就把所有的bean都给加载了。

七.spring 管理事务的方式

编程式事务

声明式事务

其中声明式事务又被分为两类。

基于xml的声明式事务

基于注解的声明式事务

八,spring中的代理方式有哪些

1,若被代理对象是一个借口,则使用jdk中的java.long.reflect.proxy代理,生成实现它的实现类。

优点。因为使用接口,所以使系统更加松耦合

缺点。需要为每一个代理目标编写借口

2.若代理对象是一个java类,则使用 CGLIB 库生成目标对象的子类 。

优点。不需要接口的存在

缺点。松散耦合度没有使用接口的好

九,IOC容器的初始化过程

1.rescourse定位。

2.载入

3.注册

十,AOP的实现原理:动态代理,区别参考第八条

 十一,spring框架的事务管理的优点,支持声明式事务。

总结:

Spring框架优点:

方便解耦,简化开发:

Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理(代码没有入侵性)

1.AOP编程的支持:

Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能(便于功能扩展)

2.声明式事务的支持:

只需要通过配置就可以完成对事务的管理,而无需手动编程

3.方便程序的测试:

Spring对Junit4支持,可以通过注解方便的测试Spring程序

方便集成各种优秀框架:

java基础模块

猜你喜欢

转载自www.cnblogs.com/jinsheng1027/p/11615503.html