浅谈Spring框架的基本应用

2022-05-30 02:46:11翟高粤
客联 2022年7期

翟高粤

摘 要:Spring是当今流行的Java Web开发框架,它能解决大部分企业应用开发的复杂性问题。对于Java开发人员来说,掌握Spring框架的基本使用,已是入职Java软件开发行业的必备技能之一。本文主要介绍Spring框架及其体系结构的基本内容及应用,并通过一个实例说明Spring框架的基本使用方法,理解Spring框架中IoC及DI的基本思想,对于Spring的入门学习有一定参考价值。

关键词:Spring框架;Java EE;IoC;DI

一、引言

Spring 是在2003年兴起的一个轻量级的Java应用开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring 的核心是控制反转(IoC)和面向切面编程(AOP)。Spring 是可以在 Java SE/EE 中使用的轻量级开源框架。Spring通过使用基本的JavaBean来实现以前只能由EJB(企业JavaBean)完成的工作,一面世即迅速取代EJB臃肿、低效的开发模式,受到大批JAVA开发者的欢迎和支持。Spring致力于JavaEE应用各层的解决方案,在表现层它提供了SpringMVC以及与Struts框架的整合功能;在业务逻辑层可以管理事务、记录日志等;在持久层可以整合MyBatis、Hibernate、JdbcTemplate等技术。因此,Spring框架是企业应用开发很好的框架之一。

二、相关理论

(一)Spring框架的特点

Spring具有简单、可测试和松耦合等特点,Spring不仅可以用于服务器端的开发,也可以用于任何Java软件開发中。具体有如下特点:

(1)非侵入式设计

(2)方便解耦,简化开发

(3)支持AOP

(4)支持声明式事务处理

(5)方便程序测试

(6)方便集成各种框架

(7)降低Java EE API的使用难度

(二)Spring的体系结构

Spring框架采用的分层设计架构,它根据一系列的功能分成20个模块,具体如图1所示。接下来对主要核心模块进行简单介绍。

(1)Core Container(核心容器)

Spring的核心容器是其他模块建立的基础,它主要由Beans模块、Core模块、Context模块、Context-support模块和SpEL模块构成。Beans模块提供了工厂模式的经典实现;Core模块提供了Spring框架的基本组成部分,包括IcC和DI功能;Context模块建立在Core和Beans模块的基础上,它是访问定义和配置的任何对象的媒介;Context-support提供了对第三方库嵌入Spring应用的集成支持;SpEL模块提供了Spring Expression Language支持,是运行时查询和操作对象图的强大的表达式语言。

(2)Data Access/Integration(数据访问/集成)

数据访问集成包括JDBC、ORM、OXM、JMS和Transactions模块。JDBC模块提供了一个JDBC的抽象层,大幅度地减少了在开发过程中对数据库操作的编码;ORM提供了对流行的对象关系映射API,包括JPA、JDO和Hibernate提供了集成层支持;OXM模块提供了一个支持对象/OXM映射的抽象层实现;JMS模块指的是Java的消息传递服务;Transactions事务模块支持对实现特殊接口以及所有POJO类的编程和声明式的事务管理。

(3)Web

Spring的Web层包括WebSocket、Servlet、Web和Portlet模块。WebSocket模块提了WebSocket和SockJS的实现,以及对STOMP的支持;Servlet模块提供了Spring的模型-视图-控制器(MVC)和REST WebServices实现的Web应用程序;Web模块提供了基本的Web开发集成特性;Portlet模块提供了在Portlet环境中使用MVC实现,类似Servlet模块的功能。

(4)其他模块

Spring的其他模块有AOP、Aspects、Instrumentation以及Test模块。AOP模块提供了面向切面编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以降低耦合性;Aspects模块提供了与AspectsJ的集成功能,AspectsJ是一个功能强大且成熟的面向切面编程(AOP)框架;Instrumentation模块提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用;Messaging模块提供了对消息传递体系结构和协议的支持;Test模块提供了对单元测试和集成测试的支持;

三、Spring核心容器

Spring框架的主要功能是通过其核心容器来实现的,Sping框架提供了两种核心容器,分别为BeanFactory和ApplicationContext。

(一)BeanFactory容器

BeanFactory是由org.springframework.beans.factory.BeanFactory接口定义,是基础类型的IoC容器,它提供了完整的IoC服务支持。BeanFactory是一个管理Bean的工厂,它主要负责初始化各种Bean,并调用它们的生命周期方法。

BeanFactory接口提供几个实现类,其中最常用的是XmlBeanFactory,该类会通过XML配置文件中的定义来装配Bean,语法实例如下:

BeanFactory beanFactory=new

XmlBeanFactory(new FileSystemResource(“c:/applicationContext.xml”);

(二)ApplicationContext

ApplicationContext是BeanFactory的子接口,也被称为应用上下文,是另一种Spring核心容器。它由org.springframework.context.ApplicationContext接口定义,不仅包含了BeanFactory的所有功能,还添加了对国际化、资源访问、事件传播等方面的支持。创建ApplicationContext接口实例,通常采用两种方法。

(1)通过ClassPathXmlApplicationContext创建

ClassPathXmlApplicationContext会从类路径classPath中寻找指定的XML配置文件,找到并加载ApplicationContext的实例化工作,其使用语法如下:

ApplicationContext applicationContext=new ClassPathXmlApplicationContext(String configLocation)

(2)通过FileSystemXmlApplicationContext会从指定的文件系统路径中寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作,其使用语法如下:

ApplicationContext applicationContext=new FileSystemXmlApplicationContext(String configLocation)

与ClassPathXmlApplicationContext有所不同的是,在读取Spring的配置文件时,FileSystemXmlApplicationContext不再从类路径中读取配置文件,而是通过参数指定配置文件的位置,这种采用绝对路径的方式,会导致程序的灵活性变差,所以这种方法一般不推荐使用。

(三)Spring编程实现

以上是对Spring的核心容器的介绍,接下来通过一个实例说明Spring框架的编程步骤。

(1)在MyEclipse中,创建一个名为firstSpring的Web项目,将Spring的4个基础包以及commons-logging的JAR包复制到lib目录中,并发布到类路径下,如图2所示。

(2)在src目录下,创建一个com.szjm.ioc包,并在包中创建接口UserDao,然后在接口中定义一个say()方法,代码如下所示。

public interface UserDao{

public void say();}

(3)在com.szjm.ioc包下,创建UserDao接口的实现类UserDaoImpl,该类需要实现接口中的say()方法,并编写一条输出语句,代码如下所示。

public class UserDaoImpl implements UserDao {

public void say() {

System.out.println("userDao say hello World !");

}

}

(4)在src目录下,创建Spring的配置文件applicationContext.xml,并在配置文件中创建一个id为userDao的Bean,代码如下所示。

<!-- 将指定类配置给Spring,让Spring创建其对象的实例 -->

(5)在com.szjm.ioc包下,创建测试类TestIoC,并在类中编写main() 方法,该main()方法需要初始化Spring容器,并加载配置文件,然后通过Spring容器获取userDao实例,最后调用实例中的say()方法,代码如下所示。

public class TestIoC {

public static void main(String[] args) {

ApplicationContext applicationContext =

new ClassPathXmlApplicationContext("applicationContext.xml");

UserDao userDao = (UserDao) applicationContext.getBean("userDao");

userDao.say();

}

}

执行上述程序后,在控制台的输出结果如下所示。

四、结论

本文主要介绍Spring框架的基础知识及一般应用。首先讲解了Spring框架的概念、作用、优点、体系结构,然后介绍了Spring的两种核心容器,接下来通过一个实例来说明如何使用Spring框架,并初步掌握Spring框架的使用方法。

參考文献:

[1]沃尔斯. Spring实战 [M]. 人民邮电出版社,2016.

[2]卡内尔. Spring开发三剑客[M],人民邮电出版社, 2020.

[3] 陈恒等. Spring Boot从入门到实战[M]. 清华大学出版社出版社,2020.