Spring是一个主流的Java Web开发框架,该框架是一个轻量级的开源框架。
Spring以IoC(Inverse of Control控制反转)和AOP(Aspect Oriented Programming面向切面编程)为内核,使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。
在实际开发中,通常服务器端采用三层体系架构,分别为表示层(web)、业务逻辑层(service)、持久层(dao)。Spring对每一层都提供技术支持,在表示层可以与Struts2框架的整合,在业务逻辑层可以管理事物,记录日志等。在持久层可以整合Hibernate、jdbcTmeplate等技术。
Spring框架的优点
- 轻量级的容器框架,没有侵入性
- IoC更加容易组合对象之间的关系,通过面向接口进行编程,可以低耦合开发。
- 易于本地测试(Junit单元测试,不用部署服务器)
- AOP可以更加容易的进行功能扩展,遵循OCP开发原则。
- Spring默认对象的创建为单例的,我们不需要再使用单例的设计模式来开发单体类。
- Spring的集成很强大,另外可以对其他框架的配置进行一元化管理。
- Spring的声明式事务的方便使用。
Spring的体系结构
Spring框架采用分层架构,它包含一系列的功能要素,被分成大约20个模块,这些模块分为Core Container、Data Access/Integration、Web、Aop、Instrumentation和测试部分。
Spring的IoC容器
控制反转的思想,所谓的IoC是指在程序设计中,实例不再由调用者来创建,而是由Spring容器来创建。Spring容器会负责控制程序之间的关系,而不是程序代码直接控制,这样控制权应用代码转移到了外部容器,控制权发生了反转,这就是Spring的IoC(控制反转)思想。
Spring为我们提供了两种Ioc容器分别是BeanFactory和ApplicationContext
BeanFactory(开发并不多用)
BeanFactory是基础类型的IoC容器,BeanFactory就是一个管理Bean的工程,它主要负责初始化各种Bean,并调用它们的生命周期方法。
BeanFactory根据XML配置文件中的定义来装配Bean
BeanFactory beanFactory = new XmlBeanFactory(new FileSystemResource("F:/applicationContext.xml"));
ApplicationContext(优势在于延迟加载)
ApplicationContext是BeanFactory的子接口,也被称为应用上下文,它不仅提供了BeanFactory所有的功能,还以一种更加面向框架的方式增强了BeanFactory的功能。主要体现在Context包使用分层和继承关系的上下文类。
创建ApplicationContext接口实例,通常采用两种方法,具体如下:
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");//从类路径中XML文件载入上下文定义信息。
ApplicationContext applicationContext = new FileSystemXmlApplicationContext("F:\\workspaces\\src\\cn\\applicationContext.xml");//从文件系统中(指定的路径下)的Xml文件载入上下文定义信息。
BeanFactory 和ApplicationContext都是通过XML配置文件加载bean的,相比之下,ApplicationContext提供了更多拓展的功能,其主要优势在于延迟加载,如果Bean的某一个属性没有注入,使用BeanFactory 加载后,在第一次调用getBean()方法时会抛出异常,而ApplicationContext则在初始化时自检,这样有利于检查所依赖属性是否注入。因此,在实际开发中,通常情况在都选择使用ApplicationContext,而只有在系统资源较少时,才考虑使用BeanFactory 。