认识Spring框架

一、spring简化Java开发

为了降低Java开发的复杂性,spring框架采取了四种关键策略

(1)基于POJO的轻量级和最小侵入性编程

注:spring竭力避免因自身的API而弄乱你的应用代码。spring不会强迫你实现spring规范的接口或继承spring规范的类,相反,在基于spring构建的应用中,它的类通常没有任何痕迹表明你使用了spring。最坏的场景是,一个类或许会使用spring注解,但它依旧是POJO。

(2)通过依赖注入和面向接口实现松耦合

注:依赖注入(Dependency Injection,DI)通过DI,对象的依赖关系将由系统中负责协调各对象的第三方组件在创建对象的时候进行设定。对象无需自行创建或管理它们的依赖关系,依赖关系被自动注入到需要他们的对象中去。两种配置方式,一种是基于XML的配置,一种是基于Java的配置。

(3)基于切面和惯例进行声明式编程

注:面向切面(aspect-oriented programming AOP)AOP能够使诸如日志模块、安全模块、事物模块这些服务模块化,并以声明的方式将它们用到需要它们影响的组件中去。所造成的结果就是这些组件会具有更高的内聚性并且会更加关注自身的业务,完全不需要了解涉及系统服务所带来的复杂性。总之,AOP能确保POJO的简单性。

(4)通过切面和模板减少样板式代码

注:spring中封装了一些实现功能的Java API的实现,比如:spring中的JdbcTemplate就是对JDBC访问数据库的封装。

二、spring容器

容器是spring的核心。spring容器使用DI管理构成应用的组件,它会创建相互协作的组件之间的关联。spring容器并不是只有一个,spring自带了多个容器的实现,可以归纳为两种不同的类型:

(1)bean工厂

(由org.springframework.beans.factory.BeanFactory 接口定义)是最简单的容器,提供基本的DI支持。

(2)应用上下文

(由org.springframework.context.ApplicationContext 接口定义)基于BeanFactory构建,并提供应用框架级的服务。

注:spring提供了多种类型的应用上下文,比如:

1)AnnotationConfigApplicationContext:从一个或多个基于Java的配置类中加载spring应用上下文

  • AnnotationConfigWebApplicationContext:从一个或多个基于Java的配置类中加载spring web应用上下文

  • ClassPathXmlApplicationContext:从类路径下的一个或多个XML配置文件中加载上下文定义,把应用上下文的类资源当做是类资源

  • FileSystemXmlApplicationContext:从系统文件下的一个或多个XML配置文件中加载上下文定义

  • XMLWebApplicationContext:从web应用下的一个或多个XML配置文件中加载上下文定义

三、bean的生命周期

在这里插入图片描述

具体的文字说明:

(1)spring对bean进行实例化
(2)spring将值和bean的引用注入到bean对应的属性中
(3)如果bean实现了BeanNameAware接口,spring将bean的ID传递给setBeanName()方法
(4)如果bean实现了BeanFactoryAware接口,spring将调用setBeanFactory()方法
(5)如果bean实现了ApplicationContextAware接口,spring将调用setApplicationContext()方法,将bean所在的应用上下文的引用传入进来
(6)如果bean实现了BeanPostProcessor接口,spring将调用它们的postProcessBeforeInitialization()方法
(7)如果bean实现了InitializingBean接口,spring将调用它们的afterPropertiesSet()方法。类似的,如果bean使用init-method声明了初始化的方法,该方法也会被调用
(8)如果bean实现了BeanPostProcessor接口,spring将调用它们的postProcessAfterInitialization()方法
(9)此时,bean已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁
(10)如果bean实现了DisposableBean接口,spring将调用它的destroy()接口方法。同样,如果bean使用了destroy-method声明了销毁方法,该方法也会被调用
发布了320 篇原创文章 · 获赞 152 · 访问量 64万+

猜你喜欢

转载自blog.csdn.net/hello_word2/article/details/104791494