1.谈谈你对国际奥委会的理解?IOC就是我们常说的控制反转,DI就是依赖注入。这两个是对同一件事从不同角度的解读。在不使用spring框架的时候,我们需要使用一个对象进行java训练,往往需要自己手动new,需要自己去fetch管理对象。使用spring的IOC容器后,对象就交给spring的IOC容器管理,一系列bean的创建、初始化、终止、依赖注入等都是IOC容器为我们完成的。当我们需要使用它时,直接调用即可。2、如何定义多个AOP的顺序?通过Ordered和PriorityOrdered接口排序。PriorityOrdered接口的优先级高于Ordered。如果同时实现了PriorityOrdered或Ordered接口,它们将按顺序值排序。值越小,优先级越高。3、springBean是线程安全的吗?结论:线程不安全的Spring容器中的Bean是否线程安全,容器本身并没有为Bean提供线程安全的策略,所以可以说Spring的Bean本身不具备线程安全的特性.如果Bean是无状态的,那么Bean就是线程安全的。如果Bean是有状态的,那么Bean就不是线程安全的。另外,Bean是否线程安全与Bean的作用域无关。Bean的范围只是意味着bean的生命周期范围是任何生命周期bean的对象。这个对象是否线程安全取决于bean中的对象本身4.Spring中bean的生命周期?bean容器在配置文件中找到SpringBean的定义。Bean容器使用Java反射API创建Bean的实例。如果涉及到一些属性值,使用set()方法设置一些属性值。如果Bean实现了BeanNameAware接口,则调用setBeanName()方法并传入Bean的名称。如果Bean实现了BeanClassLoaderAware接口,调用setBeanClassLoader()方法,传入ClassLoader对象的实例。如果Bean实现了BeanFactoryAware接口,调用setBeanClassFacotory()方法,传入ClassLoader对象的实例。与上面类似,如果实现了其他*Aware接口,则调用对应的方法。如果有与加载这个bean的Spring容器相关的BeanPostProcessor对象,则执行postProcessBeforeInitialization()方法。如果Bean实现了InitializingBean接口,则执行afeterPropertiesSet()方法。如果配置文件中的Bean定义包含init-method属性,则执行指定的方法。如果存在与加载此bean的Spring容器关联的BeanPostProcess对象,则执行postProcessAfterInitialization()方法。当Bean要销毁时,如果Bean实现了DisposableBean接口,则执行destroy()方法。当Bean要被销毁时,如果配置文件中Bean的定义中包含destroy-method属性,则执行指定的方法。5、Spring框架中使用了哪些设计模式?工厂模式:BeanFactory是简单工厂模式的体现,用于创建对象实例;单例模式:Bean默认为单例模式。代理模式:Spring的AOP功能使用了JDK的动态代理和CGLIB字节码生成技术;模板方法:用于解决代码重复问题。例如。RestTemplate、JmsTemplate、JpaTemplate。观察者模式:定义对象键的一对多依赖关系。当一个对象的状态发生变化时,所有依赖它的对象都会得到通知并更新,比如Spring中监听器的实现——ApplicationListener。6、@Autowired和@Resource的区别@Autowired可用于:构造函数、成员变量、Setter方法必须存在(您可以将其required属性设置为false)。@Resource默认是按名称组装注入的,只有找不到匹配该名称的bean时才会按类型组装注入。7、Spring支持什么类型的事务管理?Spring支持两种类型的事务管理:程序化事务管理:这意味着您以编程方式管理事务,这为您提供了极大的灵活性,但难以维护。声明式事务管理:这意味着您可以将业务代码与事务管理分开,您只需要使用注解和XML配置来管理事务。8.你更喜欢哪种类型的事务管理?Spring框架的大部分用户选择声明式事务管理是因为它对应用程序代码的影响最小,因此更符合非侵入式轻量级容器的思想。声明式事务管理优于编程式事务管理,尽管它不如编程式事务管理(允许您通过代码控制事务)灵活。唯一不足的是,最细粒度只能应用于方法层面,不能像程序化事务一样应用于代码块层面。9、Spring事务有哪几种事务传播行为?TransactionDefinition接口中定义了代表事务传播行为的八个常量。支持当前事务的条件:PROPAGATION_REQUIRED:如果存在当前事务,则加入该事务;如果没有当前事务,则创建一个新事务。PROPAGATION_SUPPORTS:如果当前有交易,则加入交易;如果没有当前事务,则继续以非事务方式运行。PROPAGATION_MANDATORY:如果有当前事务,则加入该事务;如果没有当前事务,则抛出异常。(强制性的:强制性的)。不支持当前事务:PROPAGATION_REQUIRES_NEW:创建新事务,如果有当前事务,则暂停当前事务。PROPAGATION_NOT_SUPPORTED:以非事务模式运行,如果有当前事务,则暂停当前事务。PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务则抛出异常。其他情况:PROPAGATION_NESTED:如果当前有事务,则创建一个事务作为当前事务的嵌套事务运行;如果当前没有事务,这个值相当于PROPAGATION_REQUIRED。10.Spring通知有哪几种类型?在AOP术语中,切面的工作称为通知,它实际上是程序执行时由SpringAOP框架触发的一段代码。Spring切面可以应用五种类型的通知:预通知(Before):在调用目标方法之前调用通知函数;post-notification(After):在目标方法完成后调用通知,此时不关心方法的输出是什么;After-returning:目标方法执行成功后调用通知;after-throwing:目标方法抛出异常后调用通知;环绕通知(Around):通知包装被通知的方法,在被通知的方法被调用前后执行自定义行为。原作者:老约翰
