Spring之旅
Spring最根本的使命:简化Java开发
1.基于POJO的轻量级和最小侵入性编程
在基于Spring构建的应用中,它的类通常没有任何痕迹表明你使用了Spring。
2.通过依赖注入和面向接口实现松耦合
如果一个对象只通过接口而不是具体实现或初始化过程来表明依赖关系,那么这种依赖就能够在对象本身毫不知情的情况下,用不同的具体实现进行替换。
按照传统做法,每个对象负责管理它所依赖的对象的引用,将导致高度耦合和难以测试的代码。
创建应用组件之间的协作的行为通常称为装配,Spring可采用XML和JAVA描述配置。
Spring通过应用上下文(Application Context)装载bean的定义并把它们组装起来。Spring上下文全权负责对象的创建和组装。
3.基于切面和惯例进行声明式编程
系统由许多不同的组件组成,如日志,事务管理和安全这样的系统服务经常融入到核心业务逻辑组件中去,这些系统服务称为横切关注点,如果将这些关注点分散到多个组件中去,代码会带来双重复杂性:
实现系统关注点功能代码将会重复出现在多个组件中。
组件会因为那些与自身核心业务无关的代码变得混乱。
可以把切面想象为覆盖在很多组件上的一个外壳,借助AOP,可以用各种功能层去包裹核心业务层,这些层以声明的方式灵活地应用到系统中,你的核心应用甚至根本不知道它们的存在。
4.通过切面和模版减少样板式代码
Spring旨在通过模版封装来消除样板式代码,Spring的JdbcTemplate使得执行数据库操作时,避免传统的JDBC样板代码成为了可能。
容纳你的Bean
在基于Spring的应用中,你的应用对象生存于Spring容器中,Spring容器负责创建对象,装配它们,配置它们并管理它们的整个生命周期。
Spring自带了多个容器实现,可以归纳为两种不同的类型,bean工厂由BeanFactory接口定义,是最简单的容器,提供基本的DI支持;应用上下文由ApplicationContext接口定义,基于BeanFactory构建,提供框架级别的服务。
bean的生命周期
1.Spring对bean进行实例化;
2.Spring将值和bean的引用注入到bean对应的属性中;
3.如果bean实现了BeanNameAware接口,Spring将bean的ID传递给setBean-Name()方法;
4.如果bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入;
5.如果bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()方法,将bean所在的应用上下文的引用传入进来;
6.如果bean实现了BeanPostProcessor接口,Spring将调用它们的post-ProcessBeforeInitialization()方法;
7.如果bean实现了InitializingBean接口,Spring将调用它们的after-PropertiesSet()方法。类似地,如果bean使用init-method声明了初始化方法,该方法也会被调用;
8.如果bean实现了BeanPostProcessor接口,Spring将调用它们的post-ProcessAfterInitialization()方法;
9.此时,bean已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁;
10.如果bean实现了DisposableBean接口,Spring将调用它的destroy()接口方法。同样,如果bean使用destroy-method声明了销毁方法,该方法也会被调用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。