根据个人学习情况,筛选出特别关注的信息,完整内容请看原版,仅仅是个人学习笔记。
目录
一、涉及词汇
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不支持