文章目录
- 1.Spring是什么?
- 2.为什么需要Spring?
- 3.说下你对Spring的AOP、IOC的理解?
- 4.基于java的AOP实现有哪些?
- 5.AOP的原理?
- 6.如何使用Java实现动态代理?
- 7. Spring AOP和AspectJ AOP有什么区别?
- 8.SpringAOP通知类型?
- 9. springbean的生命周期
- 10.什么是SpringMVC?
- 11.SpringMVC的请求流程
- 12.SpringMVC的核心组件有哪些?
1.Spring是什么?
Spring是一个开源的、轻量级的Java应用开发框架。通过依赖注入(Dependency Injection)和面向切面编程(Aspect-oriented Programming)等技术,使得开发者可以更加方便地开发可扩展、模块化和松耦合的应用程序,极大提高了开发效率。
2.为什么需要Spring?
Spring是一个开源的Java应用程序框架,它提供了一种构建和管理企业级应用程序的方式。Spring的存在有多种原因,它为Java开发者提供了许多重要的好处和功能,包括:
-
简化开发:Spring框架大大简化了Java应用程序的开发。它提供了许多开箱即用的功能,如依赖注入、AOP(面向切面编程)、事务管理等,这些功能可以减少开发人员的工作量。
-
松散耦合:Spring鼓励松散耦合的设计,使得组件之间的依赖性更低。这有助于提高代码的可维护性、可扩展性和可测试性。
-
依赖注入:Spring框架支持依赖注入(DI),使得组件之间的依赖关系更容易管理。通过DI,您可以将对象的依赖关系委托给Spring容器,而不是在代码中硬编码。
-
面向切面编程(AOP):Spring支持AOP,这允许您将横切关注点(如日志记录、安全性、事务管理)与主要业务逻辑分离开来,提高了代码的可重用性和清晰度。
-
声明式事务管理:Spring提供了声明式事务管理的支持,使得管理数据库事务变得更加容易。这可以帮助确保数据的一致性和可靠性。
-
集成各种技术:Spring可以与各种不同的技术集成,包括各种持久化框架(如Hibernate、JPA)、消息队列、Web框架(如Spring MVC)、安全框架等等。
-
测试支持:Spring的设计使得单元测试和集成测试变得更加容易。您可以使用Spring的测试框架来编写和运行测试,以确保代码的质量和稳定性。
-
模块化:Spring框架是模块化的,您可以选择只使用您需要的模块,而不必引入整个框架。这有助于减小应用程序的体积,并提高性能。
-
社区支持:Spring拥有一个庞大的社区和活跃的开发团队,因此可以获得广泛的支持、文档和教程。
3.说下你对Spring的AOP、IOC的理解?
-
AOP:AOP的全称是Aspect Orient Programming,即面向切面编程。是对OOP(Object Orient Programming)的一种补充,专门用于处理一些具有横切性质的服务。常常用于日志输出、安全控制、错误处理、权限管理等。降低代码的重复性,提高代码的可维护性和可复用性。
-
IOC(Inversion Of Controll,控制反转):是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由给Spring框架来管理。对象与对象之间松散耦合,也利于功能的复用。
4.基于java的AOP实现有哪些?
AspectJ、Spring AOP、Cglib、JBoss AOP
5.AOP的原理?
连接点(Join point):指程序运行过程中所执行的方法。在Spring AOP中,一个连接点总代表一个方法的执行。
切面(Aspect):被抽取出来的公共模块,可以用来会横切多个对象。Aspect切面可以看成 Pointcut切点 和 Advice通知 的结合,一个切面可以由多个切点和通知组成。在Spring AOP中,切面可以在类上使用 @AspectJ 注解来实现。
切点(Pointcut):切点用于定义 要对哪些Join point进行拦截。
通知(Advice):指要在连接点(Join Point)上执行的动作,即增强的逻辑,比如权限校验和、日志记录等。通知有各种类型,包括Around、Before、After、After returning、After throwing。
目标对象(Target):包含连接点的对象,也称作被通知(Advice)的对象。 由于Spring AOP是通过动态代理实现的,所以这个对象永远是一个代理对象。
织入(Weaving):通过动态代理,在目标对象(Target)的方法(即连接点Join point)中执行增强逻辑(Advice)的过程。
引入(Introduction):添加额外的方法或者字段到被通知的类。Spring允许引入新的接口(以及对应的实现)到任何被代理的对象。例如,你可以使用一个引入来使bean实现 IsModified 接口,以便简化缓存机制。
6.如何使用Java实现动态代理?
7. Spring AOP和AspectJ AOP有什么区别?
- Spring AOP是属于运行时增强,基于代理。而AspectJ是编译时增强,基于字节码操作(Bytecode Manipulation)。
- AspectJ相比于Spring AOP功能更加强大,
- Spring AOP相对来说更简单。
8.SpringAOP通知类型?
- 前置通知(Before Advice)
- 后置通知(After Advice)
- 环绕通知(Around Advice)
- 返回通知(After Returning Advice)
- 异常通知(After Throwing Advice)
9. springbean的生命周期
Spring启动,查找并加载需要被Spring管理的bean,进行Bean的实例化
Bean实例化后对将Bean的引入和值注入到Bean的属性中
如果Bean实现了BeanNameAware接口的话,Spring将Bean的Id传递给setBeanName()方法
如果Bean实现了BeanFactoryAware接口的话,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入
如果Bean实现了ApplicationContextAware接口的话,Spring将调用Bean的setApplicationContext()方法,将bean所在应用上下文引用传入进来。
如果Bean实现了BeanPostProcessor接口,Spring就将调用他们的postProcessBeforeInitialization()方法。
如果Bean 实现了InitializingBean接口,Spring将调用他们的afterPropertiesSet()方法。类似的,如果bean使用init-method声明了初始化方法,该方法也会被调用
如果Bean 实现了BeanPostProcessor接口,Spring就将调用他们的postProcessAfterInitialization()方法。
此时,Bean已经准备就绪,可以被应用程序使用了。他们将一直驻留在应用上下文中,直到应用上下文被销毁。
如果bean实现了DisposableBean接口,Spring将调用它的destory()接口方法,同样,如果bean使用了destory-method 声明销毁方法,该方法也会被调用。
10.什么是SpringMVC?
Spring MVC是Spring框架的一部分,它是一个用于构建Web应用程序的模块,提供了一个基于MVC(模型-视图-控制器)设计模式的框架,用于开发灵活、可维护和可扩展的Web应用程序。
11.SpringMVC的请求流程
![在这里插入
12.SpringMVC的核心组件有哪些?
-
DispatcherServlet(前端控制器): DispatcherServlet是Spring MVC的前端控制器,它接收所有的HTTP请求并负责将请求分派给合适的控制器处理。DispatcherServlet还协调视图的渲染过程。
-
HandlerMapping(处理器映射器): HandlerMapping负责将HTTP请求映射到合适的控制器处理方法上。Spring MVC提供了多种HandlerMapping实现,包括RequestMappingHandlerMapping和BeanNameUrlHandlerMapping等。
-
Controller(控制器): 控制器是Spring MVC中的一个关键组件,它是处理HTTP请求的Java类。控制器包含处理方法,这些方法负责执行具体的业务逻辑,并返回模型数据和视图名称。
-
ModelAndView(模型和视图): ModelAndView是一个封装了模型数据和视图名称的对象。控制器方法通常返回一个ModelAndView,其中包含要传递给视图的数据和要渲染的视图的名称。
-
ViewResolver(视图解析器): 视图解析器负责将逻辑视图名称解析为实际的视图对象。Spring MVC支持多种视图解析器,如InternalResourceViewResolver用于解析JSP视图、ThymeleafViewResolver用于解析Thymeleaf模板等。
-
Interceptor(拦截器): 拦截器允许在请求处理过程中执行预处理和后处理操作。拦截器可以应用于整个应用程序或特定的处理器。它们可以用于实现日志记录、权限检查、国际化等功能。
-
HandlerAdapter(处理器适配器): HandlerAdapter负责将HTTP请求分派给相应的控制器方法,并负责调用控制器方法。不同类型的控制器方法需要不同的适配器来处理,Spring MVC提供了多种适配器。
-
DataBinder(数据绑定): 数据绑定是Spring MVC中的一个核心功能,它将HTTP请求参数绑定到控制器方法的参数上。数据绑定还支持数据验证和类型转换。
-
View(视图): 视图负责渲染模型数据,通常是HTML页面或其他响应内容。Spring MVC支持各种视图类型,包括JSP、Thymeleaf、FreeMarker、JSON视图等。
-
ExceptionResolver(异常解析器): 异常解析器负责捕获和处理应用程序中的异常,并返回适当的错误响应。Spring MVC提供了DefaultHandlerExceptionResolver和SimpleMappingExceptionResolver等异常解析器。