Spring In Action<一>

来源:互联网 发布:网络信息有限公司名字 编辑:程序博客网 时间:2024/05/22 16:55

      《Spring In Action(Spring 实战)》选择这本书作为我重新学习Spring的起点也是来源网友以及同事的推荐,俗话说书读百遍其义自见,第一次、第二次...读这本书感觉感悟都可能不一样 。希望自己在这段学习的过程中做到坚持、钻研!!

      《Spring In Action(Spring 实战)》的内容包含:第一部分Spring的核心、第二部分web中的Spring、第三部分后端的Spring、第四部分Spring集成。

 一、Spring前言

Spring的作用和策略

        我们学习一项技术的前提就是要知道它是干什么的,它的优缺点是什么?其它一开始知道Spring的时候就很模糊:Spring到底是干什么的?

        Spring的目的是为了解决企业级应用开发的复杂性和简化java开发 。Spring的四种为了简化Java开发实行的策略:1.最小侵入式编程;2.通过依赖注入和面向接口编程实现松耦合;3. 通过AOP和惯例进行声明式编程;4.通过切面和模板减少样板式代码。         

        1.基于POJO最小侵入式编程

        Spring不会强迫你实现Spring规范的接口或者继承Spring规范的类

        2.DI(依赖注入)和AOP一直以来都是我们挂在嘴边所说的Spring的两大核心。那什么是依赖注入?任何有实际意义的应用都有两个及两个以上的对象组成,每个对象管理与之协作的对象(即它所依赖的对象),依赖关系由原来的目标对象自己创建和管理变成由IOC容器主动注入到目标对象中。

下列代码中传入的任务类型Quest是一个接口,而BraveKnight能够相应任何Quest的实现类:     

public class BraveKnigth implements Knight{      private Quest quest;      public Brave(Quest quest){          this.quest = quest;      }      public void  embarkQuest(){           quest.embark()      }}
这样做的好处就是:如果一个对象只通过接口来表明依赖关系,那么这种依赖就能够在这个对象不知情的情况下用具体的实现进行替换,这也是DI和面向接口编程的最大好处——松耦合。

        3.面向切面编程

        面向切面编程可以将分布在应用各个地方的功能分离出来进行重组实现代码复用。系统有多个组件组成,每个组件各自负责一个特定的功能,除了自身的核心功能外还需要承载额外的职责,日志、事务管理和安全等系统服务经常融入到这些核心业务逻辑的组件中。这些系统服务被称为:横切关注点。AOP能够将这些系统服务模块化,而核心业务逻辑组件不在关注核心功能之外的功能,大大增加了各自核心功能组件的内聚性。

       4.使用模板消除样板式代码

         样板式代码描述:通常为了实现通用的简单的功能不得不重复编写类似的代码,这样的现象旺旺是因为Java API导致的。普遍的一个现象就是JDBC。Spring通过模板封装来消除样板式代码,如通过JDBCTemplate可以实现JDBC样板式代码给我们带来的重复性无聊的工作。

Spring容器

         Spring容器负责创建、装配、配置对象并负责他们的整个生命周期。Spring容器不止一个:1.BeanFactory(最简单的容器);2.应用上下文。但是后者用的比较广泛,前者有点低级功能简单不常用。Spring自带多种类型的应用上下文,常见的是以下几种:1.AnnotationConfigApplicationContext(基于java配置的spring应用上下文);2.AnnotationConfigWebApplicationContext(基于java配置的spring web应用上下文);3.ClassPathXmlApplicationContext(从类路径下一个或多个XML文件中加载来获取上下文定义,把应用上下文定义为类资源);4.FileSystemXmlApplicationContext(从文件系统下的一个或多个XML文件中加载上下文定义);5.XmlWebApplicationContext(从web应用下的一个或多个xml配置文件加载上下文定义);后面会详细讲解1、2、5应用上下文的使用。3、4的使用如下:

        ApplicationContext  applicationContext = new FileSystemXmlApplicationContext("c://applicationcontext.xml");

        ApplicationContext  applicationContext = new ClassPathXmlApplicationContext("applicationcontext.xml");

        ApplicationContext  applicaitonContext = new AnnotationConfigApplicationContext(包名.配置类的名字.class);

Bean的生命周期

1.Spring对bean实例化

2.Spring将bean的引用注入和值注入到bean对应的属性中

3.如果bean实现了BeanNameAware接口,Spring将bean的id传给setBeanName()方法

4.如果bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()将BeanFactory实例传入

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声明了销毁方法,也会调用。

Spring体系结构

 Spring包含20个不同的模块,每个模块包含三个jar文件(二进制类库、源码、javadoc),这二十个模块根据功能分为6类不同的功能。1.数据访问与集成(JDBC、Transation、ORM、OXM、Messaging、JMS);2.web与远程调用(Web、Web servlet、Web portlet、WebSocket);3.面向切面编程(AOP,Aspects);4.Instrumentation(Instrument、Instrument Tomcat );5.Spring核心容器(Bean、Core、Context、Exception、Context support 提供bean工厂和应用上下文,还有许多企业服务:E-mail、JNDI访问、EJB集成和调度);6.测试(test)。

Spring不仅仅提供了眼前这些框架层面,Spring portfolio项目包含多个构建于Spring框架之上的框架,几乎为每一个领域的java开发提供了Spring编程模型:

1.Spring Web Flow:为基于流程的会话式web应用提供支持

2.Spring Web Service:提供了契约优先的Web Service模型,服务的实现是为了满足服务的契约而编写的

3.Spring Security:声明式安全机制

4.Spring integration:提供多种通用应用集成模式的Spring声明式风格实现,与其他应用通信

5.Spring Batch:如果要开发批处理应用,可以通过Spring batch可以使用强大的面向POJO编程模型

6.Sprign Data:更加便捷的使用数据库

7.Spring Social:社交网络扩展模块

8.Spring Mobile:支持移动web应用开发

9.Spring for android:安卓

10.Spring Boot:消除大部分Spring配置

Spring的新特性

略,因为感觉好多东西不是我菜鸟级别深究的,学完之后再来回顾新特性带来的变化。




1 0
原创粉丝点击