SpringMVC
SpringMVC的M,V,C分别代表:model;V代表View;C代表controller
Spring MVC的⼯作原理
1.客户端(浏览器)发送请求,直接请求到DispatcherServlet。
2.DispatcherServlet根据请求信息调⽤HandlerMapping,解析请求对应的Handler。
3.解析到对应的Handler(也就是我们平常说的Controller控制器)。
4.HandlerAdapter会根据Handler来调⽤真正的处理器来处理请求和执⾏相对应的业务逻辑。
5.处理器处理完业务后,会返回⼀个ModelAndView对象,Model是返回的数据对象,View 是逻辑上的View。
6.ViewResolver会根据逻辑View去查找实际的View。
7.DispatcherServlet把返回的Model传给View(视图渲染)。
8.把View返回给请求者(浏览器)。
Spring IOC
IOC(Inversion Of Controll,控制反转)是⼀种设计思想,就是将原本在程序中⼿动创建对象的控制权,交由给Spring框架来管理。IOC在其他语⾔中也有应⽤,并⾮Spring特有。IOC 容器是Spring⽤来实现IOC的载体,IOC容器实际上就是⼀个Map(key, value),Map中存放的是各种对象。 将对象之间的相互依赖关系交给IOC容器来管理,并由IOC容器完成对象的注⼊。这样可以很⼤程度上简化应⽤的开发,把应⽤从复杂的依赖关系中解放出来。IOC容器就像是⼀个⼯⼚⼀ 样,当我们需要创建⼀个对象的时候,只需要配置好配置⽂件/注解即可,完全不⽤考虑对象是如何被创建出来的。在实际项⽬中⼀个Service类可能由⼏百甚⾄上千个类作为它的底层,假如我们需要实例化这个Service,可能要每次都搞清楚这个Service所有底层类的构造函数,这可能会把⼈逼疯。如果利⽤IOC的话,你只需要配置好,然后在需要的地⽅引⽤就⾏了,⼤⼤增加了项⽬的可维护性且降低了开发难度。
Spring时代我们⼀般通过XML⽂件来配置Bean,后来开发⼈员觉得⽤XML⽂件来配置不太好,于是Sprng Boot注解配置就慢慢开始流⾏起来。
Spring Boot的核心注解是那些?他由几个注解组成?
启动类上⾯的注解是@SpringBootApplication,他也是SpringBoot的核⼼注解,主要组合 包含了以下3个注解:
@SpringBootConfiguration:组合了@Configuration注解,实现配置⽂件的功能;
@EnableAutoConfiguration:打开⾃动配置的功能,也可以关闭某个⾃动配置的选项,如 关闭数据源⾃动配置的功能:@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class});
@ComponentScan:Spring组件扫描。
谈谈⾃⼰对于Spring AOP的理解
AOP(Aspect-Oriented Programming,⾯向切⾯编程)可以将一个软件系统分为核心关注点,和横切关注点。核心关注点就是他的业务逻辑,横切关注点是核心关注点周围关系不大的代码,这些代码会经常重复,通过aop我们可以减少这些重复的代码,或者取代他的行为,和运行结果。思想就是,将一个应用程序的业务逻辑与其提供的服务分离开
比如权限认证事务管理和日志管理
Spring AOP是基于动态代理的,如果要代理的对象实现了某个接⼝,那么Spring AOP就会使⽤JDK动态代理去创建代理对象;⽽对于没有实现接⼝的对象,就⽆法使⽤JDK动态代理,转⽽使⽤CGlib动态代理
⽣成⼀个被代理对象的⼦类来作为代理。 当然也可以使⽤AspectJ,Spring AOP中已经集成了AspectJ,
AspectJ应该算得上是Java⽣态系统中最完整的AOP框架了。使⽤AOP之后我们可以把⼀些通⽤功能抽象出来,在需要⽤到的地⽅直接使⽤即可,这样可以⼤⼤简化代码量。我们需要增加新功能也⽅便,提⾼了系统的扩展性。⽇志功能、事务管理和权限管理等场景都⽤到了AOP。
谈谈⾃⼰对于Spring Boot自动装箱原理的理解
自动装配简单来说就是自动将第三方组件的bean装载到ioc容器中,不需要让开发人员写关于bena的开发的配置,在springboot开发的里面只要在启动类上加上SpringBootApplication注解就可以实现自动装配,是符合注解真正实现的是enableautoconfiguration这个注解
主要依靠三个核心的关键技术:1,引入starter(死刀t),启动依赖组件的时候,这个组件里面必须必须要包含一个configuration配置类,而在这个配置类里面我们需要通过bean的注解去声明需要装配到ioc容器里面的bean对象
第二个,这个配置类是放在第三方jar包里面的,然后通过Springboot中约定优于配置这个理念去把这个配置类的全路径放在classpath:/Meta-inf/spring.factories(飞科吹)文件里面,这样的话springboot就可以知道第三方jar包在里面这个配置类的位置,这个步骤主要是用了spring里面的springfactoriesloader来完成的
第三个springboot拿到了所有的第三方jar包里面声明的所有配置类以后在通过spring提供的importSelector这样的一个接口来实现对这些配置类的动态加载从而去完成自动装配的这样一个动作