- 1.spring 中都用到了哪些设计模式?
- 2.spring 中有哪些核心模块?
- 3.说一下你理解的 IOC 是什么?
- 4.spring 中的 IOC 容器有哪些?有什么区别?
- 5.那 BeanFactory 和 FactoryBean 又有什么区别?
- 6.@Repository、@Service、@Compent、@Controller它们有什么区别?
- 7.那么 DI 又是什么?
- 8.说说 AOP 是什么?
- 9.动态代理和静态代理有什么区别?
- 10.JDK 动态代理和 CGLIB 代理有什么区别?
- 11.Spring AOP 和 AspectJ AOP 有什么区别?
- 12.spring 中 Bean 的生命周期是怎样的?
- 13.spring 是怎么解决循环依赖的?
- 14.为什么要使用三级缓存,二级缓存不能解决吗?
- 15.@Autowired 和 @Resource 有什么区别?
- 16.spring 事务隔离级别有哪些?
- 17.spring 事务的传播机制有哪些?
- 18.springBoot 自动装配原理?
1.spring 中都用到了哪些设计模式?
1.工厂设计模式: 比如通过 BeanFactory 和 ApplicationContext 来生产 Bean 对象
BeanFactory 是 IOC 容器,是用来承载对象的
FactoryBean 是一个接口,为 Bean 提供了更加灵活的方式,通过代理一个Bean对象,对方法前后做一些操作。
6.@Repository、@Service、@Compent、@Controller它们有什么区别?
这四个注解的本质都是一样的,都是将被该注解标识的对象放入 spring 容器当中,只是为了在使用上区分不同的应用分层
- @Repository:dao层
- @Service:service层
- @Controller:controller层
- @Compent:其他不属于以上三层的统一使用该注解
- 由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了
- 静态代理通常只代理一个类
- 静态代理事先知道要代理的是什么
动态代理
- 在程序运行时,运用反射机制动态创建而成
- 动态代理是代理一个接口下的多个实现类
- 动态代理不知道要代理什么东西,只有在运行时才知道
10.JDK 动态代理和 CGLIB 代理有什么区别?
JDK 动态代理时业务类必须要实现某个接口,它是基于反射的机制实现的,生成一个实现同样接口的一个代理类,然后通过重写方法的方式,实现对代码的增强。
CGLIB 动态代理是使用字节码处理框架 ASM,其原理是通过字节码技术为一个类创建子类,然后重写父类的方法,实现对代码的增强。
18.springBoot 自动装配原理?
- 1.容器在启动的时候会调用 EnableAutoConfigurationImportSelector.class 的 selectImports方法获取一个全面的常用 BeanConfiguration 列表
- 2.之后会读取 spring-boot-autoconfigure.jar 下面的spring.factories,获取到所有的 Spring 相关的 Bean 的全限定名 ClassName
- 3.之后继续调用 filter 来一一筛选,过滤掉一些我们不需要不符合条件的 Bean 4.最后把符合条件的 BeanConfiguration 注入默认的 EnableConfigurationPropertie 类里面的属性值,并且注入到 IOC 环境当中