面试Spring概念

说说你对Spring的理解。

答:Spring是一个一站式可插拔的JAVAEE开源框架。

  Spring主要的作用是解耦,以新的机制来创建对象和处理业务。

  其体现在控制反转IOC和依赖注入DI,以及AOP面向切面。

  关于控制反转的概念,以前我们要调用某一类或者某一类中的方法,都要自己new出来,自己创建出来,这叫正控。

  现在把这个创建权交给Spring,让Spring来创建,这叫反控。然后,创建的方式就是在Spring的主配置文件applicationContext.xml中使用bean标签,写一个名称name或者唯一标识ID,再写Class 要创建的类的全限定名。  这样就可以把某类交给Spring来管理了。这种方式需要类中有无参构造器来创建的,这是常用的方式,此外还有可以通过静态工厂、实体工厂、以及实现FactoryBean接口来实例化,其他框架要跟Spring集成,都要实现该接口的。

  关于依赖注入的概念,就是把设置属性权限交给Spring来管理。然后依赖注入的方式有属性注入,就是通过set方法来注入,还有构造器注入、P命名空间注入。

   关于AOP,即面向切面编程,主要是解决代码重复的问题。其底层还涉及了设计模式的代理模式,用了JDK代理和第三方CGLIB代理。

  JDK代理需要创建proxy类,调用该类的newProxyInstant方法来实现代理对象的创建。然后这个方法的第一个参数是类加载,类加载器的获取方式我目前知道要两种,一种是当前类的字节码可以获取类加载器,另一种是线程类的当前线程可以获取类加载器。  言归正传,代理方法的第二个参数是要代理对象的接口,第三个参数是就是写增强处理器invocationhandle。

  第三方cglib代理,需要创建Enhancer类,通过设置类加载器,代理对象的字节码,增强处理器来创建代理对象。

  JDK代理和cglib代理的区别在于,jdk代理要面向接口代理的,cglib代理既可以代理有接口的,也可以代理没有接口的类

  它们的缺陷是,无法什么方法都会拦截增强,没有规则。

  这时Spring就提供了AOP的实现,可以通过动态代理 + 一定的拦截规则来  做业务增强处理。

  AOP的思想,就是把重复的鸡肋代码抽取处理,放到一个类中也就是面上。然后按照指定的规则切入到需要切入的地方。

  

  spring除了使用xml配置文件管理,也可以通过注解的方式来管理。

  控制反转的注解有:@Component    @Controller  @Service  @Repository  @PostConstruct  @PreDestroy

  依赖注入的注解有:@Autowrite  @Resource

  

  

 

  

 

posted @ 2019-07-10 22:46  luojack  阅读(161)  评论(0编辑  收藏  举报