精通Spring 4.x企业应用开发实战(第一章 Spring概述)——读书笔记

根据个人学习情况,筛选出特别关注的信息,完整内容请看原版,仅仅是个人学习笔记。

目录

一、涉及词汇

二、Spring好处

三、Spring体系结构

1.IoC

2.AOP

3.数据访问和集成

4.Web及远程操作

四、Spring 4.0特性

1.重复注解支持

2.空指针终结者:Optional<>

3.支持用Groovy定义Bean

4.支持WebSocket


 

一、涉及词汇

JAVA SE(Java Standard Edition)

用于一般桌面程序开发,可以看做是Java EE的子集。允许开发和部署在桌面、服务器、嵌入式环境和实施环境中使用的Java应用程序。包括支持Java Web服务开发的类,并为Java EE提供基础。

JAVA EE(Java Enterprise Edition Java企业版)

多用于企业开发,包括web开发等等

二、Spring好处

1.方便解耦,通过Spring提供的IoC容器,用户可以将对象之间的依赖关系交由Spring进行控制,避免硬编码造成的过度程序耦合。

2.AOP编程的支持。

3.声明式事务的支持。

4.方便程序的测试。可以用非容器依赖的编程方式进行几乎所有的测试工作。

5.方便集成各种优秀框架。提供了对Hibernate、Struts、Hessian、Quartz等的支持。

6.降低Java EE API的使用难度。Spring进行了简易的封装(如JDBC、JavaMail、远程调用等)

7.Java源码是经典的学习范例。

三、Spring体系结构

                                                    3-1-1 体系图

1.IoC

由IoC容器负责依赖类之间的创建、拼接、管理、获取等工作。BeanFactory接口是Spring框架的核心接口,实现了容器许多核心的功能。

Context模块构建于核心模块之上,扩展了BeanFatctory的功能,添加了i18n国际化、Bean生命周期控制、框架事件体系、资源加载透明化等多项功能。此外,还提供许多企业级服务的支持,如邮件服务、任务调度、JNDI获取、EJB集成、远程访问等。ApplicationContex是Context模块的核心接口。

表达式语言模块是统一表达式语言(Unified EL)的一个扩展,用于查询和管理运行器的对象,支持设置/获取对象的属性,调用对象方法,操作数组、集合等。还提供逻辑表达式运算、变量定义等功能,通过表达式串和Spring IoC容器进行交互。

2.AOP

JAVA5.0引入java.lang.instrument,允许在JVM启动时启用一个代理类,通过该代理类在运行期修改类的字节码,改变一个类的功能,从而实现AOP的功能。

3.数据访问和集成

Spring站在DAO的抽象层面,建立了一套面相DAO层的统一的异常体系,同时将各种访问数据的检查型异常转换为非检查型异常,为整合各种持久层框架提供基础。Spring通过模板化技术对各种数据访问技术进行了薄层封装,将模式化的代码隐藏,建立起和数据形式及访问技术无关的统一DAO层,借助AOP技术,提供了声明式事务的功能。

4.Web及远程操作

该模块建立在Application Context模块之上,提供了Web应用的各种工具类,如通过Listener或Servlet初始化Spring容器,将Spring容器注册到Web容器中。提供了多项面向Web的功能,如透明化文件上传、Velocity、FreeMarker、XSLT的支持。

四、Spring 4.0特性

1.重复注解支持

例如,可以在一个类中使用多个@PropertySource注解来加载不同的资源配置文件。

代码清单如下:

@PropertySrouce("classpath:/conf1.properties")

@PropertySrouce("classpath:/conf2.properties")

public class Application{

}

2.空指针终结者:Optional<>

如果一个对象可能为Null,调用方法之前就必须进行非空检查,否则会引发NullPointerException。但是,很多对象永远都不会为null,如何把那些可能为null的对象明确标识出来?如代码清单4-2-1,假设userDao不一定会被注入,原先必须使用@Autowired(required=false),现在直接使用Optional即可。

代码清单4-2-1

@Service

public class DefaultUserService implements UserService{

@Autowired

private Optional<UserDao> userDao;

public User findUserByUserName(String userName){

if (userDao.isPresent()) {

userDao.get().findUserByUserName(userName)

}

}

}

另一个使用Optional的地方是SpringMVC框架。例如下面代码参数userTel参数是可选的

@RequestMapping("/user")

public User getUserInfo(String id, Optional<String> userTel);

3.支持用Groovy定义Bean

4.支持WebSocket

浏览器版本IE<10不支持

猜你喜欢

转载自blog.csdn.net/feixiang3447/article/details/82020055