Spring连环问

Spring连环问

Spring有什么优点吗?

  • 轻量,基本版本大约2MB。
  • 通过控制反转和依赖注入实现松耦合
  • 支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
  • 通过切面和模板减少样板式代码。
  • 方便集成各种优秀框架。内部提供了对各种优秀框架的直接支持(如:Hibernate、MyBatis等)。
  • 方便程序的测试。Spring支持Junit4,添加注解便可以测试Spring程序。

面向切面,详细讲讲?

  • 面向切面(AOP),是面向对象的一种补充,它将一些公共逻辑(如事务管理、日志等)封装成切面,跟业务代码进行分离,可以减少系统的重复代码和降低模块之间的耦合度。
  • 切面就是那些与业务无关,但所有业务模块都会调用的公共逻辑。
  • 然后AOP有两种实现方式:静态代理和动态代理。
    • 静态代理:代理类在编译阶段生成,在编译阶段将通知织入Java字节码中,也称编译时增强。AspectJ使用的是静态代理。
    • 动态代理:代理类在程序运行时创建,AOP框架不会去修改字节码,而是在内存中临时生成一个代理对象,在运行期间对业务方法进行增强,不会生成新类。

两种动态代理方式有什么区别呢?

  • JDK动态代理。
    • 如果目标类实现了接口,Spring AOP会选择使用JDK动态代理目标类。
    • 代理类根据目标类实现的接口动态生成,不需要自己编写,生成的动态代理类和目标类都实现相同的接口。
    • JDK动态代理的核心是InvocationHandler接口和Proxy
    • JDK动态代理的缺点就是目标类必须有实现的接口。如果某个类没有实现接口,那么这个类就不能用JDK动态代理。
  • CGLIB动态代理。
    • 如果目标类没有实现接口,那么Spring AOP会选择使用CGLIB来动态代理目标类。
    • CGLIB可以在运行时动态生成类的字节码,动态创建目标类的子类对象,在子类对象中增强目标类。
    • CGLIB动态代理的优点就是目标类不需要实现特定的接口,更加灵活。

Spring的IOC?

  • IOC,即控制反转,就是由Spring容器管理bean的整个生命周期。
  • 通过反射实现对其他对象的控制,包括初始化、创建、销毁等,解放手动创建对象的过程,同时降低类之间的耦合度。
  • IOC的好处就是降低了类之间的耦合,对象创建和初始化交给Spring容器管理,在需要的时候只需向容器进行申请。

IOC容器初始化的过程?

  • 从XML中读取配置文件。
  • 将bean标签解析成 BeanDefinition,如解析 property 元素, 并注入到 BeanDefinition 实例中。
  • 将 BeanDefinition 注册到容器 BeanDefinitionMap 中。
  • BeanFactory 根据 BeanDefinition 的定义信息创建实例化和初始化 bean。
posted @ 2022-08-25 00:04  Faetbwac  阅读(28)  评论(0编辑  收藏  举报