Spring面试八股文(2022最新版)

Spring面试八股文(2022最新版)_第1张图片

 

1、Spring的优点

  • 通过控制反转和依赖注入实现松耦合
  • 支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
  • 通过切面和模板减少样板式代码。
  • 声明事物的支持。可以从单调繁冗的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
  • 方便集成各种优秀框架。内部提供了对各种优秀框架的直接支持(如:Hessian、Quartz、MyBatis等)。
  • 方便程序的测试。Spring支持Junit4,添加注解便可以测试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 创建 Bean 实例默认是单例的。

4、适配器模式:SpringMVC中的适配器HandlerAdatper。由于应用会有多个Controller实现,如果需要直接调用Controller方法,那么需要先判断是由哪一个Controller处理请求,然后调用相应的方法。当增加新的 Controller,需要修改原来的逻辑,违反了开闭原则(对修改关闭,对扩展开放)。

为此,Spring提供了一个适配器接口,每一种 Controller 对应一种 HandlerAdapter 实现类,当请求过来,SpringMVC会调用getHandler()获取相应的Controller,然后获取该Controller对应的 HandlerAdapter,最后调用HandlerAdapterhandle()方法处理请求,实际上调用的是Controller的handleRequest()。每次添加新的 Controller 时,只需要增加一个适配器类就可以,无需修改原有的逻辑。

常用的处理器适配器:SimpleControllerHandlerAdapterHttpRequestHandlerAdapterAnnotationMethodHandlerAdapter

// Determine handler for the current request.
mappedHandler = getHandler(processedRequest);
​
HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
​
// Actually invoke the handler.
mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
​
public class HttpRequestHandlerAdapter implements HandlerAdapter {
​
    @Override
    public boolean supports(Object handler) {//handler是被适配的对象,这里使用的是对象的适配器模式
        return (handler instanceof HttpRequestHandler);
    }
​
    @Override
    @Nullable
    public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
        throws Exception {
​
        ((HttpRequestHandler) handler).handleRequest(request, response);
        return null;
    }
}

5、代理模式:spring 的 aop 使用了动态代理,有两种方式JdkDynamicAopProxyCglib2AopProxy

6、观察者模式:spring 中 observer 模式常用的地方是 listener 的实现,如ApplicationListener

7、模板模式: Spring 中 jdbcTemplatehibernateTemplate 等,就使用到了模板模式。

3、什么是AOP?

4、AOP有哪些实现方式?

5、Spring AOP的实现原理

6、JDK动态代理和CGLIB动态代理的区别?

7、Spring AOP相关术语

8、Spring通知有哪些类型?

9、什么是IOC?

10、IOC的好处?

11、什么是依赖注入?

12、IOC容器初始化过程?

13、Bean的生命周期

14、BeanFactory和FactoryBean的区别?

15、BeanFactory和ApplicationContext有什么区别?

16、Bean注入容器有哪些方式?

17、Bean的作用域

18、Spring自动装配的方式有哪些?

19、@Autowired和@Resource的区别?

20、@Qualifier 注解有什么作用

21、@Bean和@Component有什么区别?

22、@Component、@Controller、@Repositor和@Service 的区别?

23、Spring 事务实现方式有哪些?

24、有哪些事务传播行为?

25、Spring事务在什么情况下会失效?

26、Spring怎么解决循环依赖的问题?

27、Spring启动过程

28、Spring 的单例 Bean 是否有并发安全问题?

29、Spring Bean如何保证并发安全?

30、@Async注解的原理

小伙伴们想要以上答案的和更多相关学习资料请点赞收藏+评论转发+关注我之后私信我,注意回复【000】即可获取更多免费资料!

你可能感兴趣的:(后端,spring,面试,java,后端,经验分享)