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。
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方法设置属性值,再继续查询目标方法,就有值了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器