前言
SSM框架的面试题总结(Spring, SpringBoot,Mybatis,Maven)
Spring
Spring是什么?
一款基于java语法的开发框架,它可以简化java的开发和维护,他有三大组件,IOC(控制反转),DI(依赖注入),AOP(面向切面编程).
IOC:将对象的创建权交给Spring容器,使用时直接从容器获取就行
IOC容器:ClassPathXmlApplicationContext,FileSystemXmlApplicationContext,
BeanFactory,AnnotationConfigAppllicationContext.
ApplicationContext和BeanFactory的区别?
AppplictionContext和BeanFactory都是Spring容器,BeanFactory是底层接口,ApplictionContext是派生接口,BeanFactory是懒加载,使用的时候才会创建Bean,ApplictionContext默认在容器创建时创建所有的Bean,好处时可以直接使用无需等待,缺点就是内存消耗大.
BeanFactory和FactoryBean的区别?
BeanFactory是Spring容器,FactoryBean是一个特殊的Bean,他的 作用就是创建Bean,创建的Bean会放在容器里面.
Spring中的单例Bean是线程安全的吗?
Spring中的单例Bean线程不安全,但是他是无状态的(不存储数据),所以在某种程度上讲它是线程安全.
如何解决线程安全问?
1.把Bean的作用域改成非单例 prototype
2.把共享变量放在ThreadLocal中,TreadLocal是线程私有变量,线程之间是相互隔离的.
简述Spring容器中Bean的生命周期?
1.先通过配置文件或注解拿到所有的BeanDfinition,并放在BeanDefinitionMap中
2从BeanDefinitionMap中拿到Bean定义并进行实例化
3.依赖注入,给容器中的bean属性进行赋值
4.初始化,给属性赋值
5..初始化后放进spring容器中,concurrentHashMap,使用的时候直接getBean来获取bean
6.容器销毁时,bean也会跟着销毁
什么是BeanDefinition?
BeanDefinition是bean定义,它囊括了这个bean的类型,及这个bean的名字,有哪些属性,有哪些构造函数,那些方法.
什么是DI?
依赖注入,给容器中的Bean属性进行赋值
依赖注入方式有哪些?
构造器注入<constructor-arg name=" " ref=" " value=" ">
setter注入<property name=" " ref=" " value=" ">
什么是AOP?
面向切面编程,将公共的代码抽取出来,在不改动源码的基础上,对方法进行功能增强
连接点:所有可以被功能增强的方法都是连接点
切入点:进行了功能增强的方法
通知:共性功能
通知类:通知所在的类就是通知类
切面:切入点+通知就是切面,它描述了那些方法进行了那些功能增强
AOP底层原理?
动态多练,在程序运行期间动态的生成一个代理对象,当调用到原始方法时,真正执行的时代理对象的代理方法.
动态代理的方法有两种,基于JDK的动态代理(反射),基于CGLib的动态代理(继承)
五种通知类型?
前置通知:@Before
后置通知:@After
环绕通知:@Around
异常后通知:@AfterThrowing
返回后通知:@AfterReturning
Spring使用过的注解?
定义Bean: @Component @Controller @Service @Repository
依赖注入: @Autowired @Qualifier @Resource @Value
定义