Java开发工程师最新面试题库系列——Spring部分(附答案) (3)
tom
tom
```
15. Spring自动装配是指什么?
答:自动装配就是让应用程序上下文为你找出依赖项的过程。说的通俗一点,就是Spring会在上下文中自动查找,并自动给bean装配与其关联的属性!
16. Spring自动装配有哪些方式?
答:大体上有两种方式,xml方式和注解方式。xml方式在bean标签中加入属性autowire="",值可以选择byName、byType、constructor,需要在类中为需要注入的属性提供setter方法。注解方式@Autowire,先根据byType寻找bean,如果找到数量大于1再根据byName寻找、@Resource根据byType注入、@Qualifier("beanName")指定beanName注入
17. Spring自动装配有什么局限性?
答:
- 重写: 你仍需用 和 配置来定义依赖,意味着总要重写自动装配。
- 基本数据类型:你不能自动装配简单的属性,如基本数据类型,String字符串,和类。
- 模糊特性:自动装配不如显式装配精确,如果有可能,建议使用显式装配。
18. Spring AOP是什么?
答:将对业务操作重复的操作封装为模块,通过动态代理的方式注入到方法中。
19. Spring AOP有什么作用?
答:
Authentication 权限
Caching 缓存
Context passing 内容传递
Error handling 错误处理
Lazy loading 懒加载
Debugging 调试
logging, tracing, profiling and monitoring 记录跟踪 优化 校准
Performance optimization 性能优化
Persistence 持久化
Resource pooling 资源池
Synchronization 同步
Transactions 事务
20. Spring AOP有哪些实现方式?
答:JDK动态代理和cglib,spring根据被代理类的类型采用适合的方式进行实现啊,如果是接口就采用JDK动态代理,如果是类就采用cglib方式。
21. Spring AOP和AspectJ AOP有什么区别?
22. Spring支持哪些事务管理类型?
答:
- 编程式事务管理,在代码中显式调用开启事务、提交事务、回滚事务的相关方法
- 声明式事务管理,底层是建立在 AOP 的基础之上。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。
23. Spring框架用了哪些设计模式?
答:
1、代理模式:在AOP和remoting中被用的比较多
2、单例模式:在spring配置文件中定义的bean默认为单例模式
3、模板方法模式:解决代码重复问题
父类定义骨架(共同方法的实现,调用哪些方法及顺序),某些特定方法由子类实现(父类是空方法,子类继承后再重写)
4、前端控制器模式:spring提供了DispatcherServlet来对请求进行分发
5、依赖注入模式:贯穿于BeanFactory和ApplicationContext接口的核心理念
6、工厂模式:
(1)简单工厂:
实现方式:BeanFactory根据传入一个唯一的标识来获得bean对象,由工厂类根据传入的参数动态决定应该创建哪一个产品类
实现原理:
bean容器的启动阶段:读取bean的xml配置文件,将bean元素分别转换成一个BeanDefinition对象。然后通过BeanDefinitionRegistry将这些bean注册到beanFactory中。
容器中bean的实例化阶段:主要通过反射或者CGLIB对bean进行实例化
(2)工厂方法:
实现方式:FactoryBean接口
实现原理:实现了FactoryBean接口的bean是一类叫做factory的bean,特点是spring会在使用getBean()调用获得该bean时,自动调用该bean的getObject()方法。返回的是这个bean.getObject()方法的返回值。
典型例子:spring与mybatis的结合:
//最终返回的是SqlSessionFactoryBean.getObject()的返回值
7、适配器模式
实现方式:springmvc中的适配器HandlerAdapter
实现过程:dispatcherServlet根据HandlerMapping返回的handler,向HandlerAdapter发起请求,处理handler。HandlerAdapter根据规则找到对应的Handler并让其执行,执行完毕后Handler会向HandlerAdapter返回一个ModelAndView,最后由HandlerAdapter向dispatcherServlet返回一个ModelAndView
8、装饰器模式:
实现方式:类名中包含Wrapper,或者是Decorator,就是装饰器模式
实质:动态地给一个对象添加一些额外的职责,比生成子类更灵活
9、观察者模式
实现方式:spring的事件驱动模型使用的是观察者模式,常用的地方就是listener的实现
具体实现:事件机制的实现包括事件源、事件、事件监听器:
ApplicationEvent抽象类【事件】
ApplicationListener接口【事件监听器】
ApplicationContext接口【事件源】
10、策略模式
实现方式:spring框架的资源访问Resource接口,是具体资源访问策略的抽象,也是所有资源访问类所实现的接口
24. Spring MVC框架有什么用?
答:SpringMvc是轻量级、松耦合的MVC框架,提供模型-视图-控制器层的不同支持。
25. Spring MVC DispatcherServlet的工作流程?
答:
1. Tomcat 启动,对 DispatcherServlet 进行实例化,然后调用它的 init() 方法进行初始化,在这个初始化过程中完成了:
2. 对 web.xml 中初始化参数的加载;建立 WebApplicationContext (SpringMVC的IOC容器);进行组件的初始化;
3. 客户端发出请求,由 Tomcat 接收到这个请求,如果匹配 DispatcherServlet 在 web.xml 中配置的映射路径,Tomcat 就将请求转交给 DispatcherServlet 处理;
4. DispatcherServlet 从容器中取出所有 HandlerMapping 实例(每个实例对应一个 HandlerMapping 接口的实现类)并遍历,每个 HandlerMapping 会根据请求信息,通过自己实现类中的方式去找到处理该请求的 Handler (执行程序,如Controller中的方法),并且将这个 Handler 与一堆 HandlerInterceptor (拦截器) 封装成一个 HandlerExecutionChain 对象,一旦有一个 HandlerMapping 可以找到 Handler 则退出循环;(详情可以看[ Java]SpringMVC工作原理之二:HandlerMapping和HandlerAdpater 这篇文章)
5. DispatcherServlet 取出 HandlerAdapter 组件,根据已经找到的 Handler,再从所有 HandlerAdapter 中找到可以处理该 Handler 的 HandlerAdapter 对象;
6. 执行 HandlerExecutionChain 中所有拦截器的 preHandler() 方法,然后再利用 HandlerAdapter 执行 Handler ,执行完成得到 ModelAndView,再依次调用拦截器的 postHandler() 方法;
7. 利用 ViewResolver 将 ModelAndView 或是 Exception(可解析成 ModelAndView)解析成 View,然后 View 会调用 render() 方法再根据 ModelAndView 中的数据渲染出页面;
8. 最后再依次调用拦截器的 afterCompletion() 方法,这一次请求就结束了。
内容版权声明:除非注明,否则皆为本站原创文章。