一 IOC和DI区别和联系
IOC(控制反转):就是对象之间的依赖关系由容器来创建,对象之间的关系本来是由我们开发者自己创建和维护的,在我们使用spring框架后,对象之间的关系由容器来创建和维护,将开发者做的事让容器做,这就是控制反转。
BeanFactory接口是spring ioc容器的核心接口。
spring IOC负责床啊金对象,管理对象(通过DI),装配对象,配置对象,并且管理这些对象的整个生命周期;
DI(依赖注入):在使用spring容器的时候,容器通过调用set方法或者是构造器来创建对象的依赖关系。
控制反转是目标,依赖注入是我们实现控制反转的一种手段
二 AOP的认识
AOP面向切面编程,只关注横向相关的内容,也就是只关心有没有包含指定方法,对匹配的内容进行增强处理(不改变码源),切入点表达式:execution包名。。*(…)匹配对应的方法。
通知:增强
三 循环依赖,如何解决
循环依赖:其实就是循环引用,也就是两个或者两个以上的bean互相持有对方,最终形成闭环。比如A依赖B,B依赖C,C又依赖A,
如何理解依赖?在spring中有:构造器循环依赖;filed属性注入循环依赖
构造器循环依赖:
@Service
public class A {
public A(B b) { }
}
@Service
public class B {
public B(C c) {
}
}
@Service
public class C {
public C(A a) { }
}
结果:项目启动失败,发现一个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名称寻找依赖对象