spring框架面经

1、谈谈对spring IOC的理解
IOC控制反转是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由spring框架处理。IOC容器是spring框架用来实现IOC的载体,IOC容器实际是个map,里面存放的是各种对象。将对象之间的相互依赖关系交由IOC管理,并由IOC容器完成对象的注入。IOC容器就像一个工厂一样,当我们创建一个对象的时候,只需要配置好配置文件或注解就行,完全不用考虑对象是如何创建出来的,大大增加了项目的可维护性且降低了开发难度。
IOC就是控制反转,指创建对象的控制权转移,原本创建对象的主动权和时机由自己把控,现在这种权利交给spring容器。spring根据配置文件或注解来创建实例和管理实例之间的关系,在程序运行时动态的创建对象以及管理对象之间的依赖应用。
spring的IOC有三种注入方式:构造器注入、setter方法注入、接口注入
Spring 中的 IoC 的实现原理就是工厂模式加反射机制。

3、BeanFactory和ApplicationContext有什么区别?
(1)BeanFactory和ApplicationContext是spring的两大接口,都可以当做spring的容器,其中ApplicationContext是BeanFactory的子接口。
可以理解为就是个 HashMap,Key 是 BeanName,Value 是 Bean 实例。通常只提供注册(put),获取(get)这两个功能。我们可以称之为 “低级容器”。
3.1 依赖关系
(1)BeanFactory是spring里面最底层的接口,包含了各种Bean的定义,管理bean的加载、实例化和生命周期,维护bean之间的依赖关系。
(2)ApplicationContext接口作为BeanFactory的子接口,除了他所具有的功能外,还提供了更完整的功能框架。
3.2 加载方式
(1)BeanFactory采用的延迟加载的方式注入bean,即只有在使用到某个bean时(调用getbean)才对该bean实例化,因此不能发现一些存在的spring配置问题。
(2)ApplicationContext,他是在容器启动时,一次性创建了所有bean,这样容器启动时就可以发现spring中属性配置错误问题,有利于检查所依赖属性是否注入。

4、什么事spring依赖注入

AOP
一般称为面向切面编程,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。可用于权限认证、日志、事务处理等。
2、AOP底层原理
a)AOP底层使用动态代理,动态代理有两种。
(1)有接口情况,使用JDK动态代理,创建接口实现类代理对象,增强类的方法。
spring框架面经_第1张图片

(2)没有接口情况,使用CGLIB动态代理,创建子类的代理对象,增强类的方法。
class User{}
spring框架面经_第2张图片
class Person extends User{}

5、spring AOP、AspectJ AOP的区别
(1)springAOP属于运行时增强,AspectJAOP属于编译时增强。
(2)springAOP基于代理(proxying),而AspectJAOP基于字节码操作。
(3)AspectJAOP比springAOP功能更强大,springAOP相对来说更简单。
(4)如果切面不多,两者性能差距不大,如果切面很多,最好选择AspectJAOP,因为他比springAOP快很多。

6、AOP术语
​ a)连接点:类里面哪些方法可以被增强,这些方法称为连接点
​ b)切入点:实际被真正增强的方法称为切入点
​ c)通知(增强):实际增强的逻辑部分称为通知,且分为以下五种类型:
​ 1)前置通知 2)后置通知 3)环绕通知 4)异常通知 5)最终通知
​ d)切面:把通知应用到切入点过程

前置通知【before advice】:在连接点前面执行,前置通知不会影响连接点的执行,除非是抛出异常。
正常返回通知【after returning advice】在连接点正常执行完成后执行,如果连接点抛出异常则不执行。
异常返回通知[After throwing advice]:在连接点抛出异常后执行。
返回通知:在连接点执行完成后执行,不管正常执行完成还是抛出异常都会执行。
环绕通知[Around advice]:环绕通知围绕在连接点前后,比如一个方法调用的前后。

7、bean生命周期
(1)根据配置方法调用Bean构造方法或者工厂实例化bean对象。
(2)利用依赖注入完成bean中所有属性值得配置注入。
(3)把bean实例传递bean后置处理器的方法 postProcessBeforeInitialization
(4)调用bean的初始化方法
(5)把bean实例传递bean后置处理器的方法postProcessAfterInitialization
(6)程序使用bean
(7)当容器关闭时,调用bean的销毁的方法。

8、spring中的bean的作用域有哪些
(1)singleton:唯一bean实例,spring中bean默认都是单例的。在加载spring配置文件的时候会创建实例对象。
(2)prototype:每次请求都会创建一个新的bean实例。在调用getbean的时候会创建实例对象。
(3)request:每次HTTP请求,都会创建一个bean
(4)session:同一个HTTP session共享一个bean,不同session使用不同的bean

9、@Component和@bean的区别是什么
(1)作用对象不同:@component注解作用于类,@bean注解作用于方法
(2)@component通常是通过类路径扫描来自动侦测以及自动装配到spring容器中。@bean注解通常是我们在标有该注解的方法中定义产生了bean。

10、常用的spring注解
@component,@repository @controller @service @configration @bean 注册类
@configuration 作为配置类,替代xml配置文件
@autowired默认是按照类型装配注入的,默认情况下要求依赖对象必须存在。@resource 默认按照名称进行装配,名称 可以通过name属性进行指定。

11、spring框架中用到了哪些设计模式
工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例;
单例模式:Bean默认为单例模式。
代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术;
模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。
观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现–ApplicationListener。

你可能感兴趣的:(SSM,spring,java,后端)