SpringBoot面试经验总结 (未完,总结中。。。)

1. 什么是SpringBoot?

SpringBoot 是Spring开源项目下的子项目,是Spring组件一站式解决方案,它简化了构建Spring项目的难度,提供了各种注释简化了繁重的配置(之前的Spring项目中都采用大量XML配置文件),并且提供了各种启动器(Starter),使开发者更容易上手,更容易创建项目。

2.  SpringBoot的优点?

a. 容易上手,提升开发效率 (比如创建一个bean,只需要注释对应的class对象或者对应的方法,无需创建繁重的xml配置), 架构上的设计也变得跟清楚简单(不如需要引入jpa依赖,那么只需要加入jpa starter的依赖就可以了)

b. 相比传统的SpringMVC架构项目,各方面都变得更加简单, 使得编码,配置,部署,监控等都变得简单

c. 功能齐全(Spring全家桶), 比如jpa, mybatis,security,kafka, redis等都有对应的starter可以直接依赖使用

3. SpringBoot的关键/常用注释有哪些?

@SpringBootApplication, @SpringBootConfiguration, @Configuaration, @EnableAutoConfiguration, @Bean, @Service, @Component, @Autowaire, @Resource, @Respository, @Transctional等

4. SpringBoot的Starter的工作原理是什么?在项目中用过的starter有哪些?

在SpringBoot启动是,@SpringBootApplication会自动去maven中读取每个starter的spring.factories文件,这个文件中定义了所有需要的Bean,这个Bean会自动装配并且被注入到SpringContext中

5. SpringBoot的事务,请解释一下怎么用?

编程式事务

声明式 - @Transactional (推荐使用) 

6. SpringBoot的事务,哪些情况下会失效?为什么?

1. 方法名是非public修饰的

@Transactional(rollbackOn = Exception.class)
protected void method_b() {
    // business logic code...
}

Why: 因为Spring AOP是通过反射+动态代理实现的,如果是其他如protected/private修饰的话是没办法用动态代理的

2. 事务方法被同类其他方法直接调用

public class TransactionalService {

    public void method_a() {
        method_a();
    }

    @Transactional(rollbackOn = Exception.class)
    public void method_b() {
        // business logic code...
    }

}

Why: 被本地方法直接调用走的不是Spring AOP动态代理,所以没生效

3. 抛出的异常不在捕捉范围内

Why: 就是这样定义的,没问什么, 哈哈哈

等等比如因隔离机制和传播机制的不同定义方式造成的失效问题 (待研究)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值