【SpringInAction】读书笔记

SpringInAction 

第一部分 Spring的核心

第一章: Spring之旅

1.1 简化Java开发

1.1.1 激发POJO的潜能

不会给POJO 增加额外的耦合 不用继承或者实现某些类

1.1.2 依赖注入

任何一个有实际应用的类一般都会由两个或者两个以上的类组合而成。

而这种耦合是必须存在,也是我们正在面对的。

耦合具有两面性:

1). 紧密的代码难以测试,包括打地鼠式的Bug

2).一定程度的耦合是必须的,没有耦合什么都做不了

这时 , 我们可以使用构造器注入,来进行注入。  即构造器种注入其他的类。

而Spring 给我们提供了一种更简单的方式,应用上下文的自动装配,用xml来进行注入。

或者使用Java Config 来进行注入

1.1.3应用切面

像日志和安全 会分布在所有的系统中,而且特定的系统并不一定需要显示的调用他们。

可以使用切面编程,将特定的方法设置为切面横切点。在特定的时间 (比如调用前,调用后) 执行。可以让spring 来进行管理,而不需要我们在每个类中都要添加。

我们可以在xml中添加AOP的支持,

1.1.4使用模板消除样板是代码

有时候 ,我们不得不去重复写样板式的代码 -- 即一模一样的代码 。

例如Java 代码中的JDBC , 我们可以使用Spring 提供的JdbcTemplate  来进行 去模板的编写

1.2 容纳你的Bean

Spring 中对Bean的容纳有两种类型,

BeanFactory

Spring应用上下文

一般来说我们都会使用Spring 上下文

1.2.1 使用Spring应用上下文

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

eg:

ApplicationContext context1 = new AnnotationConfigApplicationContext(KnightConfg.class);

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

ClassPathXmlapplicationContext:从类路径下的一个或多个XML配置文件中加载上下文定义,把应用上下文的定义文件作为类资源。

eg:

ApplicationContext context = new ClassPathXmlApplicationContext("Minstrel.xml");

FileSystemXmlapplicationContext:从文件系统下的一个或多个Xml配置文件中加载上下文定义。

1.2.2 Bean 的生命周期

Spring对bean 的管理要比 普通的Bean 困难的多

1.实例化

2.注入

3.BeanNameAware 接口 setBeanNameAware()方法

4.BeanFactoryAware接口setBeanFactory()方法

5.ApplicationContextAware接口 setApplicationContext()方法

6.BeanPostProcessor接口post-ProcessBeforeInitialization()方法

7.InitializingBean接口 after-PropertiesSet()方法 若使用了初始化方法,则init-method()方法也会调用

8.BeanPostProcessor接口调用post-ProcessAfterInitialization()方法

9.此时Bean 就绪

10.DisposableBean接口,destory()方法 也可以使用销毁方法 destory-method()

1.3 Spring 风景线

下面 转自 :

https://blog.csdn.net/l_sail/article/details/67059557  Spring风景线 

核心容器

1、Core模块:封装了框架依赖的最底层部分,包括资源访问、类型转换及一些常用工具类。

2、Beans模块:提供了框架的基础部分,包括反转控制和依赖注入。其中Bean

Factory是容器核心,本质是“工厂设计模式”的实现,而且无需编程实现“单例设计模式”,单例完全由容器控制,而且提倡面向接口编程,而非面向实现编程;所有应用程序对象及对象间关系由框架管理,从而真正把你从程序逻辑中把维护对象之间的依赖关系提取出来,所有这些依赖关系都由BeanFactory来维护。

3、Context模块:以Core和Beans为基础,集成Beans模块功能并添加资源绑定、数据验证、国际化、Java EE支持、容器生命周期、事件传播等;核心接口是ApplicationContext。

4、EL模块:提供强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器,命名变量,支持算数和逻辑运算,支持从Spring容器获取Bean,它也支持列表投影、选择和一般的列表聚合等。

这种语言支持对属性值、属性参数、方法调用、数组内容存储、收集器和索引、逻辑和算数操作及命名变量,并且通过名称从 Spring 的控制反转容器中取回对象。表达式语言模块也支持 List 的映射和选择,

AOP 及 Instrumentation

1、AOP模块:Spring AOP模块提供了符合AOP Alliance规范的面向方面的编程(aspect-oriented programming)实现,提供比如日志记录、权限控制、性能统计等通用功能和业务逻辑分离的技术,并且能动态的把这些功能添加到需要的代码中;这样各专其职,降低业务逻辑和通用功能的耦合。

2、Aspects模块:提供了对AspectJ的集成,AspectJ提供了比Spring ASP更强大的功能。

3、spring-instrument 模块提供了类 instrumentation 的支持和在某些应用程序服务器使用类加载器实现。spring-instrumenttomcat用于 Tomcat Instrumentation 代理。

消息

Spring Framework 4 包含了 spring-messaging 模块,从 Spring 集成项目中抽象出来,比如 Message, MessageChannel,
MessageHandler 及其他用来提供基于消息的基础服务。该模块还包括一组消息映射方法的注解,类似于基于编程模型Spring MVC 的注解。

数据访问/集成

Data Access/Integration 层由 JDBC, ORM, OXM, JMS, 和 Transaction 模块组成。
1、事务模块:该模块用于Spring管理事务,只要是Spring管理对象都能得到Spring管理事务的好处,无需在代码中进行事务控制了,而且支持编程和声明性的事物管理。

2、JDBC模块:提供了一个JBDC的样例模板,使用这些模板能消除传统冗长的JDBC编码还有必须的事务控制,而且能享受到Spring管理事务的好处。

3、ORM模块:提供与流行的“对象-关系”映射框架的无缝集成,包括Hibernate、JPA、Ibatiss等。而且可以使用Spring事务管理,无需额外控制事务。

4、OXM模块:提供了一个对Object/XML映射实现,将java对象映射成XML数据,或者将XML数据映射成java对象,Object/XML映射实现包括JAXB、Castor、XMLBeans和XStream。

5、JMS模块:用于JMS(Java MessagingService),提供一套“消息生产者、消息消费者”模板用于更加简单的使用JMS,JMS用于用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

6、Web/Remoting模块:Web/Remoting模块包含了Web、Web-Servlet、Web-Struts、Web-Porlet模块。

Web模块

Web 层由 spring-web, spring-webmvc, spring-websocket, 和 spring-webmvc-portlet 组成 。

1、spring-web:提供了基础的web功能。例如多文件上传、集成IoC容器、远程过程访问(RMI、Hessian、Burlap)以及Web Service支持,并提供一个RestTemplate类来提供方便的Restful services访问。

2、spring-webmvc :(也被称为 Web Servlet 模块)提供了一个Spring MVC Web框架实现。包含 Spring 的model-view-controller (模型-视图-控制器(MVC)和REST Web Services 实现的Web应用程序。Spring 的 MVC 框架提供了domain model(领域模型)代码和 web form (网页)之间的完全分离,并且集成了 Spring Framework 所有的其他功能。

3、spring-webmvc-portlet 模块(也被称为 Web-Portlet 模块)提供了MVC 模式的实现是用一个 Portlet 的环境和 springwebmvc模块功能的镜像。

Test模块

spring-test 模块支持通过组合 JUnit 或 TestNG 来进行单元测试和集成测试 。它提供了连续的加载 ApplicationContext 并且缓存这些上下文。它还提供了 mock object(模仿对象),您可以使用隔离测试你的代码。

猜你喜欢

转载自www.cnblogs.com/mythdoraemon/p/9175809.html