spring-面试题

什么是spring?
理解说明:

spring是一个轻量级的开发框架,设计理念就是让开发人员面向接口开发。

作用:

解决企业开发复杂性,让开发人员专注于应用程序的开发

优点:

低耦合(为什么方便解耦-spring将所有对象的创建和依赖关系,都有自己来管理),

​ AOP(面向切面)
​ 声明式事务

​ 方便解耦

​ 集成各种框架

缺点:spring的依赖反射,而反射影响性能

spring中用到哪些设计模式?
*工厂模式:beanFactory管理所有spring注册的对象,称之为Bean用唯一标识来获取Bean对象,
*单例模式:所有的bean都是单例模式
*代理模式:spring中AOP基于代理模式
模板模式:spring中的JDBCRestemplate,restTemplate
观察者模式:spring中的applicationListener

适配器模式:

spring特点:

AOP,IOC,事务管理。

那些模块组成?

数据库-orm框架

aop 分层 提供自定义拦截器,切点。

放bean的 核心容器,提供基本的操作,控制反转,依赖注入。

web(servlet)

test 测试

讲解一下spring中的核心容器?(bean Factory)

bean factory是任何以spring为基础的应用的核心,它让spring成为一个容器。

是工厂模式的一种实现,用于spring的bean管理,控制反转(平时都是自己new对象,现在由spring进行管理实例化)。

spring中有那些不同类型的事件?

上下文更新事件—>上下文开始---->上下文停止---->上下文关闭

前三种都是当容器调用Configrable Application Context的接口进行更新,开始,和结束。

上下文关闭事件是通过 Application Context 中被关闭时,会将所有单例Bean都被销毁。

请求处理事件:处理http请求结束时候,如果该bean实现了Application Listener接口,Application Event被发布以后,bean会被自动通知。

application listener

是spring请求处理事件的关键,配合Application Event一起使用来完成Application context的事件机制。

spring应用程序有哪些不同的组件?

进行拆分,基础–核心–功能–切面–配置;

基础:用户在使用时候的接口。

核心:bean的使用。

功能:一些接口的实现。

切面:aop的使用。如前置通知输出请求日志。

配置:spring的配置文件,如jdbc的链接。

什么是控制反转?

把之前自己来管理的如自己new对象,全部交由spring进行管理。

控制反转有什么作用?

解耦,管理对象。

控制反转的优点?

把应用的代码量降到最低,就如依赖注入如果手动去,先对普通对象的创建,在对依赖对象或者属性进行赋值。

加载服务的的饿加载和懒加载。

饿加载:spring容器初始化的时候进行bean创建,消耗资源,利用发现错误。

懒加载:spring容器中在使用bean的时候进行加载,消耗资源较小,不利于提前发现错误。

通过 default-lazy-init=“true” 创建bean时 开启懒加载。

控制反转的实现原理?

反射加工厂模式。

反射包括jdk的动态代理还有cg代理,

动态代理是bean实现jdk的动态代理的接口,重写父类的方法。

cg代理,自动生成bean的子类。进行父类的方法。

控制反转的特点?

依赖注入。

bean Factory 和application Context的区别?

applicationContext是beanFactory的子接口。

beanFactory采用的时懒加载,调用getBean时候创建bean。

applicationContext采用饿加载,启动容器的时候创建bean。

什么是依赖注入?

是在bean初始化前进行遍历bean中的元素,方法是否有生成bean的注解(bean,conmpoent)有的话spring进行单例池中进行查找,有的话拿出来,给当前bean进行赋值。没有则进行创建依赖bean。

构造器和setter注入的区别?

构造器:强制注入,setter:可选注入

什么是spring beans?

形成spring主干对象,被spring ioc 初始化,管理的java对象统称为beans。

bean定义包含什么?

它所属的元数据,和生命周期。

配置元数据方式有,xml,注解,java。

单例bean是线程安全的吗?

不是,为什么,因为默认是单例模式无状态,没有进行线程封装。

解决方法

把作用域重singleton变为prototype,这要请求bean相当于new,所以是线程安全。

非要单例的话,用Thread Local。

bean的生命周期?

实例化->实例化前->实例化后->放入单例池->销毁

先是对声明的bean进行实例化执行流程是如果有构造器就是先构造器注入,如果实现bean name aware调用方法Set Bean Name,如果实现Bean Factory Aware 调用Set Bean Factory方法,如果实现了Application Context Aware调用set Application Context方法,如果实现了Bean Post Proscessor调用默认初始方法,如果你自己声明了初始化方法注解@post Construct自定义了初始化方法,则使用该方法。这时候放入单例池中,最后销毁,调用disposable Bean的destroy方法,或则自定义实现的自定义销毁方法。

什么是bean的自动装配?

通过bean Factory进行bean之间的依赖关系。

有哪些装配bean的方式?

by type 根据参数类型

by name根据bean的名称

构造器 根据无参构造器进行by type进行

自动 先根据构造器,没有就进行by type

@Autowired自动装配过程?

在bean的初始化前spring会对bean中的标有@Autowied会去找到所属要的bean然后装配当该对象中,同样autowired会先进行bytype后byname。

什么是基于java的spring注解配置?

@bean,@configuration

bean作用与方法上需要返回,configuration作用在类上,把这个类交由spring ioc 管理。

@autowired和@Resourse区别?

Autowried默认通过类型注入,且注入的bean必须存在。

Resourse默认通过name进行注入,且注入的未找到会通过类型注入。

spring中的事务传播?

1.propagation_required(需要传播):如果有事务就加入,没有就新建。

2.propagation_supports(可有可无传播):如果有事务就加入没有就非事务执行。

3.propagation_mandtory(强制传播):有事务就加入,没事务就报错。

4.propagation_requires_news(新传播):有没有都要创建

5.propagation_not_supported (忽略传播):全部非事务,有事务挂起。

6.propagation_never(不要传播):有事务就报错。

7.propagation_nested(包含传播):有事务就包含执行,没有就做换类型required。

spring事务隔离?

五种级别。默认使用数据库隔离级别,

其他四种和数据库相同。

读未提交,可能引发脏读,幻读,不可重复读。

读已提交,可能引发不可重复读,幻读。

可重复读,可能引发幻读。

串行化。不会引发,但是会给表上锁,开销巨大。

spring AOP?

面向切面编程,对业务无关进行的管理,前置通知,环绕通知,后置通知,异常通知。

springAop和aspectj AOP的区别?

spring是动态代理,aspectj 是静态代理,

静态代理会修改.class的字节码(自己创建一个代理类并用注解声明通知类型)会在编译class文件中添加,动态代理是在运行时候创建一个代理类,复制父类的方法,调用方法。

jdk代理和cglib代理?

jdk是接口代理,不支持类代理,主要是类proxy,invocation handler,如果没有实现该接口会使用cglib,cglib是通过继承,创建一个子类继承父类的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值