「这是我参与2022首次更文挑战的第2天,活动详情查看:2022首次更文挑战」
前言:经过这一年的工作虽然我在写JAVA,但是我发现自己并非对Spring的设计初中和他的强大之处有着具体的了解,这边我也寻求了各种资料了解Spring的强大。
简化开发:
关键策略:
一、Spring激发了POJO的潜能,在Spring刚出来的那个时代,很多框架通过强迫应用继承它们的类或实现它们的接口从而导致应用与框架绑死。经典的例子有EJB 2时代的无状态会话bean。这种侵入式的编程方式在早期版本的Struts、WebWork、Tapestry以及其他的JAVA规范和架构中都可以看到。相比之下的Spring则是不会用强迫你实现Spring规范的接口或继承Spring规范类,然而在基于Spring构建的应用中,你往往大多数情况下是看不见他的使用痕迹。
二、Spring依赖的注入,DI的运用使得代码变得异常简单并且更容易理解和测试,他有着松耦合的重要特性。
三、Spring的切面(AOP)也是其最最重要的特性,他可以使你在遍布应用各处的功能分离出来形成可重用的组件,例如我们通常说的日志、事务管理、安全这样的系统服务结合到自身的业务逻辑中的组件中去,这些系统通常被称为横切关注点。
四、Spring使用了模板消除样板式代码,我们在开发中运用的比较少,不过在JDK1.8过后Stream将其这个特性发挥到玲离尽致。
小结:上面我说的这些特性,是Spring用于简化JAVA开发,我们可以看到JAVA应用在简单性、可测试性、松耦合性等各个方面都有收益。
Bean的容纳:
使用应用上下文:
在Spring自带了多种类型的应用上下文。
名称 | 作用 |
---|---|
AnntationConfigApplicationContext | 从一个或多个基本Java的配置类中加载Spring应用上下文 |
AnntationConfigWebApplicationContext | 从一个或多个基本Java的配置类中加载Spring Web应用上下文 |
ClassPathXmlApplicationContext | 从类路径下的一个或多个XML配置文件中加载上下文定义,把应用上下文的定义文件作为类资源 |
FileSystemXmlApplicatContext | 从文件系统下的一个或多个XML配置文件中加载上下文定义 |
XmlWebApplicatContext | 从Web应用下的一个或多个XML配置文件中加载上下文定义 |
bean的生命周期
周期如下:
- Spring对bean进行了实例化。
- Spring将值和bean的引用注入到bean对应的属性中。
- 如果bean实现了BeanNameAware接口,Spring对bean的ID传递给setBean-Name()方法。
- 如果bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入
- 如果bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()方法,将bean所在的应用下上文的引用传入进来。
- 如果bean实现了BeanPostProcessor接口,Spring将调用它们的post-ProcessBeforeInitialization()方法。
- 如果bean实现了InitializingBean接口,Spring将调用它们的after-PropertiesSet()方法。类似的,如果bean使用init-method声明了初始化方法,该方法也会被调用。
- 如果bean实现了BeanPostProcessor接口,Spring将调用它们的post-ProcessAfterInitialzation()方法。
- 此时,bean已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,直到被销毁。
- 如果bean实现了DisposableBean接口,Spring将调用他的destroy()接口方法。与此同时,如果bean使用了destroy-method声明了销毁方法,则该方法也会被调用。