Java高频面试题(十):Spring框架核心(IOC与AOP深度解析)
Spring、SpringBoot、SpringMVC、Mybatis、Mybatis-Plus、SpringSecurity框架Spring FrameWork基础核心:提供IOC容器管理Bean生命周期,通过AOP实现日志、事务等横切关注点。整合角色:作为底层容器,支撑SpringBoot、SpringMVC、SpringSecurity等模块的运行核心概念IOC(控制反转):在Spring里,创建被调用者的工作不再由调用者创建。通过BeanFactory和ApplictionContext容器管理对象生命周期,将创建的对象交由spring容器管理,spring负责创建对象,以及给对象赋值,不用程序员自己new一个对象,降低耦合度。Bean生命周期步骤:推断构造方法-进行实例化-填充属性-处理Aware回调-初始化前,处理@postconstruct注解-初始化,处理initalizingBean接口-初始化后,进行AOPDI(依赖注入):当调用一个实例时,需要调用另外一个实例时,创建被调用的实例的工作被Spring容器来完成,然后注入调用的实例中,称为依赖注入。通过构造器、Setter或注解(@Autowrited)注入依赖,对于Service层中Mapper进行@Autowrited依赖注入。循环依赖解决方案(指两个或多个Bean之间相互依赖):构造器注入:避免循环依赖@Lazy注解:延迟初始化Bean三级缓存:Spring通过(singletonFactories解决循环依赖如AOP代理场景、earlySingletonObjects、singletonObjects)处理原型和单例作用域的限制。AOP(面向切面编程):默认使用JDK动态代理(基于接口)和CGLIB(基于子类继承)实现横切逻辑(如事务、日志),可通过proxyTargetClass=true强制使用CGLIB@Aspect自定义切面@PointCut和@Around设置方法的切点@Before或@After设置执行方法前后需要执行的方法通知类型Spring中的事务如何实现的:Spring事务底层是基于数据库事务和AOP实现的如果使用的@transactional注解,则利用事务管理器创建一个数据库连接修改数据库连接的autocommit数据为false,禁止此连接自动提交执行当前方法,方法中会执行sql如果没有异常就直接提交事务出现异常就需要回滚事务Spring中@transactional失效:没有被代理对象调用,spring事务基于代理实现的方法范围是private时,事务也会失效Spirng启动流程:首先进行扫描,扫描得到所有的BeanDefinition解析对象,并存入Map中筛选出非懒加载的单例BeanDefinition进行创建Bean单例Bean创建完之后,spring会发布一个容器启动事件容器启动流程:Refresh() -创建BeanFactory-扫描组件-实例化Bean-处理依赖SpringBoot基础核心:基于Spring的约定大于配置的理念,通过自动配置(@EnableAutoConfiguration)和Starter机制快速搭建应用,简化配置。整合能力:内嵌Tomcat,默认集成SpringMVC、SpringSecurity等框架组件关键实现自动装配原理基于@EnableAutoConfiguration和spring.factories文件,通过条件注解(@ConditionalOnClass等)按需加载配置类SpringBoot外部化配置加载顺序优先级顺序:命令行参数系统环境变量appliction-{profile}.properties默认application.properties启动流程:SpringApplication.run()初始化引导类,执行refreshContext()加载上下文。Starter机制如spring-boot-starter-web聚合Tomcat、SpringMVC等依赖,简化依赖管理Springboot如何启动tomcat创建一个spring容器利用@conditionOnClass来判断是否有tomcat依赖(tomcat是支持jsp和servlets的Web服务器)获取启动tomcat的bean,并创建bean对象如何自定义starter:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2420146.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!