
Spring
收集spring相关面试题
一个带圈的糖
无需言,做自己
展开
-
SpringBoot 中常用注解及其底层实现
1.@ SpringBootApplication 注解:这个注解标识了一个 SpringBoot 工程,它实际上是另外三个注解的组合,这三个注解是:a .@ SpringBootConfiguration :这个注解实际就是一个@ Configuration ,表示启动类也是一个配置类b .@ EnableAutoConfiguration :向 Spring 容器中导入了一个 Selector ,用来加载 ClassPath 下 SpringFactories 中所定义的自动配置类,将这些自动加载为原创 2023-02-16 23:53:42 · 460 阅读 · 0 评论 -
Spring 中的事务是如何实现的
1.Spring事务底层是基于数据库事务和 AOP 机制的2.首先对于使用了@ Transactional 注解的 Bean , Spring 会创建一个代理对象作为 Bean3.当调用代理对象的方法时,会先判断该方法上是否加了@ Transactional 汪解4.如果加了,那么则利用事务管理器创建一个数据库连接5.并旦修改数据库连接的 autocommit 属性为 false ,禁止此连接的自动提交,这是实现 Spring 事务非常重要的一步6.然后执行当前方法,方法中会执行 sql7.执行原创 2023-02-16 23:34:24 · 260 阅读 · 0 评论 -
Spring 中什么时候@ Transactional 会失效
因为 spring 事务是基于代理来实现的,所以某个加了@ Transactional 的方法只有是被代理对象调用时,那么这个注解才会生效,所以如果是被代理对象来调用这个方法,那么@ Transactional 是不会生效的。同时如果某个方法是 private 的,那么@ Transactionalt 也会失效,因为底层 cglib 是基于父子类来实现的,子类是不能重载父类的 private 方法的,所以无法很好的利用代理,也会导致@ Transactianal 失效原创 2023-02-16 23:36:45 · 231 阅读 · 0 评论 -
ApplicationContext 和 BeanFactory 有什么区别
BeanFactory 是 Spring 中非常核心的组件,表示Bean工厂,可以生成 Bean ,维护 Bean ,而 ApplicationContext 继承了 BeanFactory ,所以 ApplicationContext 拥有 BeanFactory 所有的特点,也是一个Bean工厂,但是 ApplicationContext 除开继承了 BeanFactory 之外,还继承了诸如 EnvironmentCapable 、 MessageSource 、 ApplicationEventPu原创 2023-02-16 23:32:54 · 89 阅读 · 0 评论 -
Spring 容器启动流程是怎样的
1.在创建 Spring 容器,也就是启动 Spring 时:2.首先会进行扫描,扫描得到所有的 BeanDefinition 对象,并存在一个 Map 中3.然后筛选出非懒加载的单例 BeanDefinition 进行创建 Bean ,对于多例 Bean 不需要在启动过程中去进行创建,对于多例 Bean 会在每次获取 Bean 时利用 BeanDefinition 去创建4.利用 BeanDefinition 创建 Bean 就是 Bean 的创建生命周期,这期间包括了合并 BeanDefinitio原创 2023-02-16 23:37:15 · 172 阅读 · 0 评论 -
SpringBoot 中配置文件的加载顺序是怎样的?
优先级从高到低,高优先级的配置覆盖低优先级的配置,所有配置会形成互补配置。1.命令行参数。所有的配置都可以在命令行上进行指定;2. Java 系统属性( System . getPropertiesO );3.操作系统环境变量;4. jar 包外部的 application -[ profile ). properties 或 application . yml (带 spring . profile )配置文件5.jar包内部的 application -( profile ). propert原创 2023-02-16 23:57:41 · 303 阅读 · 0 评论 -
Spring MVC的设计原理
3.处理器映射器找到具体的处理器(可以根据 xml 配置、注解进行查找),生成处理器及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet .7. HandlerAdapter 将 controller 执行结果 ModelAndView 返回给 DispatcherServlet .10. DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中)。2. DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。原创 2023-03-16 22:15:41 · 237 阅读 · 0 评论 -
spring中的bean是线程安全的吗?
spring本身并没有针对bean做线程安全的处理,所以:1.如果bean是无状态的,那么bean则是线程安全的。2.如果bean是有状态的,那么bean则不是线程安全的。另外bean是不是线程安全的,跟bean的作用域没有关系,bean的作用域只是表示bean的生命周期范围,对于任何生命周期的bean都是一个对象,这个对象是不是线程安全的,还是得看这个bean对象本身。原创 2023-02-15 23:22:44 · 532 阅读 · 0 评论 -
spring中的bean创建的生命周期有哪些步骤?
1.推断构造方法2.实例化3.填充属性,也就是依赖注入4.处理aware回调5.初始化前,处理@PostConstruct注解6.初始化,处理InitializingBean接口7.初始化后,进行AOP原创 2023-02-15 23:18:03 · 100 阅读 · 0 评论 -
SpringBoot 是如何启动 Tomcat 的
1.首先, SpringBoot 在启动时会先创建一个 Spring 容器2.在创建 Spring 容器过程中,会利用@ ConditionalOnClass 技术来判断当前 classpath 中是否存在 Tomcat 依赖,如果存在则会生成一个启动 Tomcat 的 Bean3.Spring容器创建完之后,就会获取启动Tomcat8的 Bean ,并创建 Tomcat 对象,并绑定端口等,然后启动 Tomcat原创 2023-02-16 23:56:33 · 225 阅读 · 0 评论