spring面试题

一、spring面试题

1、spring的优点

  • spring通过依赖注入和控制反转实现松耦合,来程序员和对象之前进行耦合
  • 通过面向切面编程,通过解耦的方式,来实现程序的事务,日志
  • spring是一个轻量级的框架
  • spring可以整合不同的框架,来创建项目

2.Spring 用到了哪些设计模式?

1、简单工厂模式BeanFactory就是简单工厂模式的体现,根据传入一个唯一标识来获得 Bean 对象。

@Override
public Object getBean(String name) throws BeansException {
    assertBeanFactoryActive();
    return getBeanFactory().getBean(name);
}

2、工厂方法模式FactoryBean就是典型的工厂方法模式。spring在使用getBean()调用获得该bean时,会自动调用该bean的getObject()方法。每个 Bean 都会对应一个 FactoryBean,如 SqlSessionFactory 对应 SqlSessionFactoryBean

3、单例模式: spring注册的所有的实例默认都是使用单例模式

4、适配模式: 适配器 SpringMvc中HadlerAdatper类,当我们请求进入springMvc中,handlerMapping会根据url找到成对应的Handler ,会通过Adapter 来适配Handler ,最后通过Adapter来执行Handler方法

5、代理模式:spring的aop使用动态代码,如果类实现了接口jdk自带的代理模式,如果没有实现通过cglib来进行代理

3.什么是AOP?

面向切面编程,作为面向对象的一种补充,将公共逻辑(事务管理、日志、缓存等)封装成切面,跟业务代码进行分离,可以减少系统的重复代码和降低模块之间的耦合度。切面就是那些与业务无关,但所有业务模块都会调用的公共逻辑

4、AOP有哪些实现方式?

AOP有两种实现方式:静态代理和动态代理。

静态代理

静态代理:代理类在编译阶段生成,在编译阶段将通知织入Java字节码中,也称编译时增强。AspectJ使用的是静态代理。

缺点:代理对象需要与目标对象实现一样的接口,并且实现接口的方法,会有冗余代码。同时,一旦接口增加方法,目标对象与代理对象都要维护。

动态代理

动态代理:代理类在程序运行时创建,AOP框架不会去修改字节码,而是在内存中临时生成一个代理对象,在运行期间对业务方法进行增强,不会生成新类

5、Spring AOP的实现原理

SpringAOP实现原理其实很简单,就是通过动态代理实现的。如果我们为Spring的某个bean配置了切面,那么Spring在创建这个bean的时候,实际上创建的是这个bean的一个代理对象,我们后续对bean中方法的调用,实际上调用的是代理类重写的代理方法。而SpringAOP使用了两种动态代理,分别是JDK的动态代理,以及CGLib的动态代理

你可能感兴趣的:(框架,面试题,spring,java,后端)