一句话描述Spring框架的工作原理

Spring有什么作用?

  • 当您调用SpringApplication.run(MyApp.class)时,它会使用提供的类来获取类的包,
  • 然后遍历所有类、包和子包及其类,以通过反射获取所有@Beans、@Services等。。。
  • 生成所有类的列表,读取它们的构造函数和参数,生成依赖关系图,
  • 尝试根据依赖关系图以正确的顺序调用它们的构造函数(创建实例,也称为“Beans”),
  • 并将之前创建的bean传递给构造函数调用(如果需要)。。。
  • 最后,根据应用程序的类型,它执行Spring应用程序上下文,其中包含所有bean。。。

Spring是99%的反射和代理模式(“Spring Magic”)和1%的真实魔法

代理模式
了解代理模式(Proxy Pattern)和AOP 面向方面编程(Aspect Oriented Programming),你就会理解 Spring 的基础知识。

换一种说法,Spring 用它自己的类 "包裹 "你的应用程序,并通过这些类路由流量。这样,它就能通过注解提供常见的、开箱即用的功能。

例如,假设你想确保从某个方法对数据库的调用是事务性的。Spring 允许您为该方法添加 @Transactional 注解,通过其 Transactional 类路由流量,从而确保该方法在任何数据库故障情况下都能按预期运行。

@Transactional
public void saveOrder(Order order) {
    ....
}

​​​​​​​这里最重要的部分之一就是代理魔法。从本质上讲,Spring 可以使用 Spring AOP 将类封装为代理类,从而在将类转化为 Spring Bean 时为其添加行为。然后,AOP 代理 Bean 将被注入,并可在 Bean 方法被调用之前或之后添加行为,如添加缓存、驱动事务行为等。

更酷的是,这些 AOP 代理通过依赖注入获得其依赖关系,允许您配置将注入到您的 AOP 代理中的 TransactionManager Bean,而无需实际考虑代理本身...只需创建 JavaConfig 或添加注解,通过 Spring Boot 添加 TransactionManager Bean 或自定义配置,然后用 @Transactional 标记您的方法、类或接口...