❝做为一个Java程序员,Spring没得商量,对咱们是必须会的,并且很重要,几乎咱们大多项目都用得它,做为一个优质且生态系统很是全面的框架,不只在使用上很给力,源码也有很大的学习价值。小编给你们整理了50道面试题,或者说50个知识点,能够先收藏起来了😊。前端
❞
Spring框架是因为软件开发的复杂性而建立的,Spring使用的是基本的JavaBean来完成之前只可能由EJB完成的事。从简单性、可测性和松耦合性角度而言,绝大部分Java应用均可以用Spring。java
大约分为20个模块。程序员
优势:web
缺点:面试
负责建立对象、管理对象(经过依赖注入)、整合对象、配置对象以及管理这些对象的生命周期。正则表达式
依赖注入是Spring实现IoC的一种重要手段,将对象间的依赖关系的控制权从开发人员手里转移到容器。spring
1.构造器注入编程
2.setter注入json
3.接口注入(咱们几乎不用)缓存
优势:
缺点:
建立对象步骤复杂,有必定学习成本。
利用反射建立对象,效率上有损。(对于代码的灵活性和可维护性来看,Spring对于咱们的开发带来了很大的便利,这点损耗不算什么哦)
1.Spring 对bean进行实例化。
2.Spring将值和bean的引用注入到 bean对应的属性中。
3.若是bean实现了BeanNameAware接口,Spring将bean的ID传递给setBeanName()方法。
4.若是bean实现了BeanFactoryAware接口, Spring将调用setBeanFactory()方法,将 bean所在的应用引用传入进来。
5.若是bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()方法,将bean所在的应用引用传入进来。
6.若是bean实现了BeanPostProcessor 接口,Spring将调用他们的post-ProcessBeforeInitalization()方法。
7.若是bean实现了InitializingBean接口,Spring将调用他们的after-PropertiesSet()方法,相似地,若是bean使用init-method声明了初始化方法,该方法也会被调用。
8.若是bean实现了BeanPostProcessor接口,Spring将调用它们的post-ProcessAfterInitialization()方法。
9.此时, bean已经准备就绪,能够被应用程序使用了,他们将一直驻留在应用上下文中,直到该应用被销毁。
10.若是bean实现了DisposableBean接口,Spring将调用它的destory()接口方法,一样,若是bean使用destroy-method声明了销毁方法,该方法也会被调用。
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,经过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。
前置通知(Before): 目标方法被调用以前调用通知功能。
后置通知(After): 目标方法完成以后调用通。
返回通知(After-returning): 目标方法成功执行以后调用通知。
异常通知(After-throwing): 目标方法抛出异常后调用通知。
环绕通知(Around): 在被通知的方法调用以前和调用以后执行自定义的行为。
链接点是在应用执行过程当中可以插入切面的一个点。这个点能够是调用方法时、抛出异常时、甚至修改一个字段时。
切点的定义会匹配通知所要织入的一个或多个链接点。咱们一般使用明确的类和方法名称,或是利用正则表达式定义所匹配的类和方法名称来指定这些切点。有些AOP框架容许咱们建立动态的切点,能够根据运行时的决策(好比方法的参数值)来决定是否应用通知。
切面是通知和切点的结合。通知和切点共同定义了切面的所有内容。
织入是把切面应用到目标对象并建立新的代理对象的过程。切面在指定的链接点被织入到目标对象中。
引入容许咱们向现有的类添加新方法或属性。
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑汇集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不须要从新编写业务逻辑。
MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
SpringMVC是Spring框架的一个模块。是一个基于MVC的框架。
DispatcherServlet
DispatcherServlet : 前端控制器,也叫中央控制器。相关组件都是它来调度。
HandlerMapping : 处理器映射器,根据URL路径映射到不一样的Handler。
HandlerAdapter : 处理器适配器,按照HandlerAdapter的规则去执行Handler。
Handler : 处理器,由咱们本身根据业务开发。
ViewResolver : 视图解析器,把逻辑视图解析成具体的视图。
View : 一个接口,它的实现支持不一样的视图类型(freeMaker,JSP等)
1.用户请求旅程的第一站是DispatcherServlet。
2.收到请求后,DispatcherServlet调用HandlerMapping,获取对应的Handler。
3.若是有拦截器一并返回。
4.拿到Handler后,找到HandlerAdapter,经过它来访问Handler,并执行处理器。
5.执行Handler的逻辑。
6.Handler会返回一个ModelAndView对象给DispatcherServlet。
7.将得到到的ModelAndView对象返回给DispatcherServlet。
8.请求ViewResolver解析视图,根据逻辑视图名解析成真正的View。
9.返回View给DispatcherServlet。
10.DispatcherServlet对View进行渲染视图。
11.DispatcherServlet响应用户。
1.具备Spring的特性。
2.能够支持多种视图(jsp,freemaker)等。
3.配置方便。
4.非侵入。
5.分层更清晰,利于团队开发的代码维护,以及可读性好。
Tips:Jsp目前不多有人用了。
不是。具体线程问题须要开发人员来处理。
组件扫描(component scanning):Spring会自动发现应用上下文中所建立的bean。
自动装配(autowiring):Spring自动知足bean之间的依赖。
no - 默认设置,表示没有自动装配。
byName : 根据名称装配。
byType : 根据类型装配。
constructor : 把与Bean的构造器入参具备相同类型的其余Bean自动装配到Bean构造器的对应入参中。
autodetect :先尝试constructor装配,失败再尝试byType方式。
default:由上级标签的default-autowire属性肯定。
Hibernate
iBatis
JPA (Java Persistence API)
TopLink
JDO (Java Data Objects)
OJB
Dao 层实现类注解,扫描注册 bean。
讲常量、配置中的变量值、等注入到变量中。
定义控制器类。
@Aspect
@RequestMapping
做用是将返回对象经过适当的转换器转成置顶格式,写进response的body区。一般用来返回json、xml等。
@RestController
@PathVariable
用来标记缓存查询。
@CacheEvict
泛指组件,很差归类时,能够用它。
当建立多个相同类型的 bean 时,而且想要用一个属性只为它们其中的一个进行装配,在这种状况下,你可使用 @Qualifier 注释和 @Autowired 注释经过指定哪个真正的 bean 将会被装配来消除混乱。
@Transaction
声明式:声明式事务也有两种实现方式。
编码式:提供编码的形式管理和维护事务。
事务在嵌套方法调用中如何传递,具体如何传播,取决于事务传播行为。
参考:
《Spring in action 4》
《SPRING技术内幕》
《Spring源码深度解析》
《Spring5企业级开发实战》
https://spring.io
百度百科
本文使用 mdnice 排版