springBoot

SpringBoot

0、SpringBoot是如何启动Tomcat的?

(1)首先,SpringBoot在启动时会先创建一个Spring容器;

(2)在创建Spring容器过程中,会利用@ConditionalOnClass技术来判断当前classpath中是否存在Tomcat依赖,如果存在则会生成一个启动Tomcat的Bean;

(3)Spring容器创建完之后,就会获取启动Tomcat的Bean,创建Tomcat对象,并绑定端口等,然后启动Tomcat。

1、Spring的常见注解?

(1)第一类是:声明Bean。有@Component、@Service、@Repository、@Controller

(2)第二类是:依赖注入相关的。有@Autowired、@Qualifier、@Resourse

(3)第三类是:设置作用域的。有@Scope

(4)第四类是:Spring配置相关的。有@Configuration、@ComponentScan、@Bean

(5)第五类是:跟AOP相关做增强的注解。有@Aspect、@Before、@After、@Around、@Pointcut

2、SpringMVC的常见注解?

(1)@RequestMapping:用于映射请求路径

(2)@RequestBody:接收http请求的json数据,将json数据转换为java对象

(3)@RequestParam:指定请求参数的名称

(4)@PathViriable:从请求路径中获取请求参数(/user/{id}),传递给方法的形参

(5)@ReponseBody:将Controller方法返回对象转换为json对象响应给客户端

(6)@RequestHeader:获取指定的请求头数据

(7)@GetMapping:是一个组合注解, 通常用来处理get请求,常用于执行查询操作。

是@RequestMapping(value="这里写的是请求的路径",method = RequestMethod.GET)的缩写。

(8)@PostMapping:是一个组合注解, 通常用来处理post请求,常用于执行添加操作。

是@RequestMapping(value="这里写的是请求的路径",method = RequestMethod.POST)的缩写。

(9)@PutMapping:是一个组合注解,通常用来处理put请求,常用于执行更新操作。

是@RequestMapping(value="这里写的是请求的路径",method = RequestMethod.PUT)的缩写。

(10)@DeleteMapping:是一个组合注解。通常用来处理delete请求,常用于执行删除操作。

是@RequestMapping(value="这里写的是请求的路径",method = RequestMethod.DELETE)的缩写。

3、@Controller和@RestController区别?

1、@RestController 是 @Controller 和 @ResponseBody 的组合注解,用于创建 RESTful 风格的 API。 2、@RestController 返回的数据会直接作为响应的主体内容(JSON 或 XML),不进行页面跳转或视图解析。 3、@Controller 用于传统的 MVC 架构,负责处理请求并返回视图作为响应。 @Controller 方法通常需要配合 @ResponseBody 注解,才能将返回值作为响应的主体内容。 传统的springMVC一般就需要直接返回视图,而现在新兴的前端技术vue在项目中为前后端分离的架构,前端框架负责处理数据和渲染页面,而后端 API 则负责提供数据即可,所以对返回视图的要求也就比较少了

4、SpringBoot中常用注解及其底层实现?

(1)@SpringBootApplication注解:这个注解标识了一个SpringBoot工程,它实际上是另外三个注解的组合,这三个注解是:

a. @SpringBootConfiguration:这个注解实际就是一个@Configuration,表示启动类也是一个配置类;

b. @EnableAutoConfiguration:向Spring容器中导入了一个Selector,用来加载ClassPath下SpringFactories中所定义的自动配置类,将这些自动加载为配置Bean;

c. @ComponentScan:标识扫描路径,因为默认是没有配置实际扫描路径,所以SpringBoot扫描的路径是启动类所在的当前目录。

(2)@Bean注解:用来定义Bean,类似于XML中的<bean>标签,Spring在启动时,会对加了@Bean注解的方法进行解析,将方法的名字做为beanName,并通过执行方法得到bean对象。

(3)@Controller、@Service、@ResponseBody、@Autowired。

5、SpringBoot的自动装配原理?

在SpringBoot项目的引导类上有一个注解@SpringBootApplication,这个注解是对三个注解进行了封装,分别是@SpringBootConfiguration、 @EnableAutoConfiguration、@ComponentScan。

其中,@EnableAutoConfiguration是实现自动装配的核心注解。该注解通过@import导入对应的配置选择器。关键的是内部就是读取了该项目和该项目引用的Jar包的classpath路径下META-INF/spring.factories文件中所配置的类的全类名。

在这些配置类中所定义的Bean会根据条件注解所指定的条件来决定是否需要将其导入到Spring容器中。

一般条件判断,会有像@ConditionalOnClass这样的注解,去判断是否有对应的class文件,如果有则加载该类,把这个配置类的所有Bean放入Spring容器中使用。

6、MyBatis的执行流程?

(1)读取MyBatis配置文件:mybatis-config.xml加载运行环境和映射文件

(2)构造会话工厂SqlSessionFactory,一个项目只需要一个,单例的,一般由Spring进行管理

(3)会话工厂创建SqlSession对象,这里面就包含了执行SQL语句的所有方法

(4)操作数据库的接口,Executor执行器,同时负责查询缓存的维护

(5)Executor接口的执行方法中有一个MappedStatement类型的参数,它封装了映射信息

(6)输入参数映射

(7)输出结果映射

7、MyBatis是否支持延迟加载?

是支持的。

延迟加载的意思是,在需要用到数据的时候才进行加载,不需要用到数据时就不加载数据。

MyBatis支持一对一关联对象和一对多关联集合对象的延迟加载。

在MyBatis配置文件中,可以配置是否启用延迟加载,lazyLoadingEnabled=true|false,默认是关闭的。

8、延迟加载的底层原理?

延迟加载在底层主要使用的CGLIB动态代理实现的

第一,使用CGLIB创建目标对象的代理对象,这里的目标对象就是开启了延迟加载的mapper

第二,当调用目标方法时,进入拦截器invoke方法,当发现目标方法是null值,再执行sql查询

第三,获取数据后,调用set方法设置属性值,再继续查询目标方法,就有值了

posted @   守漠待花开  阅读(57)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
点击右上角即可分享
微信分享提示