一 IOC和DI区别和联系

IOC(控制反转):就是对象之间的依赖关系由容器来创建,对象之间的关系本来是由我们开发者自己创建和维护的,在我们使用spring框架后,对象之间的关系由容器来创建和维护,将开发者做的事让容器做,这就是控制反转。
BeanFactory接口是spring ioc容器的核心接口。
spring IOC负责床啊金对象,管理对象(通过DI),装配对象,配置对象,并且管理这些对象的整个生命周期;
DI(依赖注入):在使用spring容器的时候,容器通过调用set方法或者是构造器来创建对象的依赖关系。
控制反转是目标,依赖注入是我们实现控制反转的一种手段

二 AOP的认识

AOP面向切面编程,只关注横向相关的内容,也就是只关心有没有包含指定方法,对匹配的内容进行增强处理(不改变码源),切入点表达式:execution包名。。*(…)匹配对应的方法。
通知:增强

三 循环依赖,如何解决

循环依赖:其实就是循环引用,也就是两个或者两个以上的bean互相持有对方,最终形成闭环。比如A依赖B,B依赖C,C又依赖A,image.png
如何理解依赖?在spring中有:构造器循环依赖;filed属性注入循环依赖
构造器循环依赖:

  1. @Service
  2. public class A {
  3. public A(B b) { }
  4. }
  5. @Service
  6. public class B {
  7. public B(C c) {
  8. }
  9. }
  10. @Service
  11. public class C {
  12. public C(A a) { }
  13. }

结果:项目启动失败,发现一个cycle

四 Spring Bean的生命周期

1、从xml配置的Bean,@Bean注解,或者Java代码BeanDefinitionBuilder中读取Bean的定义,实例化Bean对象;
2、设置Bean的属性;
3、注入Aware的依赖(BeanNameAware,BeanFactoryAware,ApplicationContextAware);
4、执行通用的方法前置处理,方法: BeanPostProcessor.postProcessorBeforeInitialization()
5、执行 InitalizingBean.afterPropertiesSet() 方法
6、执行Bean自定义的初始化方法init,或者 @PostConstruct 标注的方法;
7、执行方法BeanPostProcessor.postProcessorAfterInitialization()
8、创建对象完毕;
9、执行 DisposableBean.destory() 方法;
10、执行自定义的destory方法或者 @PreDestory 标注的方法;
11、销毁对象完毕

五 spring框架中都用到了哪些设计模式?

代理模式:在AOP中被使用最多;
单例模式:在spring配置文件中定义bean的时候默认的时单例模式;
工厂模式:BeanFactory用来创建对象的实例
模板方法:用来解决重复性代码
前端控制器:spring提供了DispatcherServlet来对请求进行分发;
视图帮助:spring提供了一系列的JSP标签;
依赖注入:是贯穿于BeanFactory/ApplicaContext接口的核心理念。

六 SpringBean的作用域


七 常用注解


八 事务传播行为

propagation(蔓延,传播,传输)


九 AOP的通知类型


十 Spring 单例的Bean是线程安全的吗?


十一 @Autowired和@Resource的区别?

@Autowire默认按照类型装配,默认情况下,它要求依赖对象必须存在,如果想允许为null,可以设置它required属性为false,如果我们想使用按照名称装配,可以结合@Qualifier注解一起使用;
@Resource默认按照名称进行装配,当找不到与名称匹配的bean才会按照类型装配,可以通过name属性指定,如果没有指定name属性,当注解标注在字段上默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象