使用Spring 3引导Web应用程序
1.概述
这是关于使用Spring 3.1和基于Java的配置来建立RESTfull Web应用程序的系列教程的第一篇。 本文将重点介绍如何引导Web应用程序 ,讨论如何从XML过渡到Java,而不必完全迁移整个XML配置。
2. Maven
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org</groupId><artifactId>rest</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version><exclusions><exclusion><artifactId>commons-logging</artifactId><groupId>commons-logging</groupId></exclusion></exclusions></dependency><dependency><groupId>cglib</groupId><artifactId>cglib-nodep</artifactId><version>${cglib.version}</version><scope>runtime</scope></dependency></dependencies><build><finalName>rest</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>1.6</source><target>1.6</target><encoding>UTF-8</encoding></configuration></plugin></plugins></build><properties><spring.version>3.2.2.RELEASE</spring.version><cglib.version>2.2.2</cglib.version></properties></project>
2.1。 cglib依赖关系的证明
您可能想知道为什么cglib是一个依赖项-事实证明有理由将其包含在其中-没有它,整个配置将无法运行。 如果删除,Spring将抛出:
原因:java.lang.IllegalStateException:处理@Configuration类需要CGLIB。 将CGLIB添加到类路径或删除以下@Configuration bean定义
Spring处理@Configuration类的方式解释了发生这种情况的原因。 这些类实际上是bean,因此,它们需要了解Context,并尊重范围和其他bean语义。 这是通过针对每个@Configuration类动态创建具有此意识的cglib代理来实现的,因此可以实现cglib依赖性。
此外,因此,对配置注释类有一些限制:
- 配置类不应是最终的
- 他们应该有一个没有参数的构造函数
2.2。 Spring 3.2中的cglib依赖项
从Spring 3.2开始, 不再需要将cglib添加为显式依赖项 。 这是因为Spring现在正在内联cglib –这将确保所有基于类的代理功能都可以在Spring 3.2中立即使用。
新的cglib代码位于Spring包下: org.springframework.cglib (替换原始的net.sf.cglib )。 更改软件包的原因是为了避免与类路径上已经存在的任何cglib版本冲突。
另外,现在使用新的cglib 3.0,它是从较早的2.2依赖项升级的(有关更多详细信息,请参见JIRA问题 )。
3.基于Java的Web配置
@Configuration
@ImportResource( { "classpath*:/rest_config.xml" } )
@ComponentScan( basePackages = "org.rest" )
@PropertySource({ "classpath:rest.properties", "classpath:web.properties" })
public class AppConfig{@Beanpublic static PropertySourcesPlaceholderConfigurer properties() {return new PropertySourcesPlaceholderConfigurer();}
}
首先, @Configuration批注–这是基于Java的Spring配置使用的主要工件。 它本身使用@Component进行元注释,这使注释的类成为标准bean ,因此也成为组件扫描的候选对象。 @Configuration类的主要目的是成为Spring IoC容器的bean定义的来源。 有关更详细的描述,请参见官方文档 。
然后, @ ImportResource用于导入基于XML的现有Spring配置。 这可能是仍在从XML迁移到Java的配置,或者只是您希望保留的传统配置。 无论哪种方式,将其导入到容器对于成功迁移都是必不可少的,它允许很小的步骤而没有太大的风险。 替换的等效XML注释是:
<import resource =” classpath *:/ rest_config.xml” />
继续@ComponentScan –这将配置组件扫描指令,有效地替换XML:
<context:component-scan base-package="org.rest" />
从Spring 3.1开始,默认情况下, @ Configuration不包括在类路径扫描中,请参见JIRA问题 。 在Spring 3.1之前,这些类应明确排除在外:
excludeFilters = { @ComponentScan.Filter( Configuration.class ) }
@Configuration类不应被自动发现,因为它们已由Container指定并使用-允许重新发现它们并将其引入Spring上下文将导致以下错误:
由以下原因引起:org.springframework.context.annotation.ConflictingBeanDefinitionException:豆类[org.rest.spring.AppConfig]的由注释指定的豆名称'webConfig'与同名和类[org.net]的现有,不兼容的豆定义冲突。 rest.spring.AppConfig]
最后,使用@Bean批注配置属性支持 – PropertySourcesPlaceholderConfigurer在@Bean批注的方法中初始化,指示它将产生由Container管理的Spring bean。 此新配置已替换以下XML:
<context:property-placeholder
location="classpath:persistence.properties, classpath:web.properties"
ignore-unresolvable="true"/>
有关为什么需要手动注册PropertySourcesPlaceholderConfigurer bean的详细讨论,请参见带有Spring教程的属性 。
3.1。 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="rest" version="3.0"><context-param><param-name>contextClass</param-name><param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value></context-param><context-param><param-name>contextConfigLocation</param-name><param-value>org.rest.spring.root</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><servlet><servlet-name>rest</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextClass</param-name><param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value></init-param><init-param><param-name>contextConfigLocation</param-name><param-value>org.rest.spring.rest</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>rest</servlet-name><url-pattern>/api/*</url-pattern></servlet-mapping><welcome-file-list><welcome-file /></welcome-file-list></web-app>
首先,定义根上下文并将其配置为使用AnnotationConfigWebApplicationContext而不是默认的XmlWebApplicationContext 。 较新的AnnotationConfigWebApplicationContext接受带注解的@Configuration的类作为Container配置的输入,这是设置基于Java的上下文所必需的。
与XmlWebApplicationContext不同,它不假定默认配置类位置,因此必须设置Servlet的“ contextConfigLocation” init-param 。 这将指向@Configuration类所在的java包。 还支持类的完全限定名称。
接下来,将DispatcherServlet配置为使用相同类型的上下文,唯一的区别是它从不同的包中加载配置类。
除此之外, web.xml并没有真正从XML更改为基于Java的配置。
4。结论
提出的方法允许将Spring配置从XML平滑迁移到Java,同时将新旧混合在一起。 这对于较旧的项目很重要,因为较旧的项目可能具有许多基于XML的配置,无法一次全部迁移。 这样,应用程序的web.xml和引导程序是迁移的第一步,之后可以以较小的增量移植其余的XML bean。
在关于REST with Spring的下一篇文章中 ,我将介绍如何在项目中设置MVC,HTTP状态代码的配置,有效负载编组和内容协商。 同时,您可以签出github项目 。
翻译自: https://www.javacodegeeks.com/2011/11/bootstrapping-web-application-with.html
使用Spring 3引导Web应用程序相关推荐
- camel.js_Camel 2.11 –没有Spring的Camel Web应用程序
camel.js 在撰写本文时,我们刚刚向即将到来的Apache Camel 2.11添加了一个新组件,该组件允许使用Camel运行Web应用程序,而不必依赖Spring Framework来加速Ca ...
- Camel 2.11 –没有Spring的Camel Web应用程序
在撰写本文时,我们刚刚向即将到来的Apache Camel 2.11添加了一个新组件,该组件允许使用Camel运行Web应用程序,而不必依赖Spring Framework来加速Camel. 或与此相 ...
- 使用Hibernate和Spring构建Java Web应用程序
这篇文章将展示如何在Spring环境中使用带有Hibernate ORM的MYSQL DB创建学生注册应用程序. 这是一个简单的应用程序,旨在在注册过程中从用户收集输入详细信息,将这些详细信息保存在M ...
- 使用Java和Spring构建现代Web应用程序
使用Spring Framework创建Java Web应用程序从未如此简单. 如果您已经熟悉Java并且几乎没有创建Web应用程序的经验,或者如果您担心所有很酷的孩子都放弃Java取而代之的是Rub ...
- 使用MyBatis和Spring构建Java Web应用程序
这篇文章将展示如何在Spring环境中使用带有MyBatis框架的MYSQL DB创建学生注册应用程序. 这是一个简单的应用程序,旨在在注册期间从用户收集输入详细信息,将详细信息保存在MYSQL DB ...
- 带有Jersey和Spring的RESTful Web应用程序
几个月前,我们的任务是创建一个API,以向第三方开发人员公开我们系统中的某些功能. 我们选择将这些功能公开为一系列REST Web服务. 我开始使用Jersey ,它是JSR 311 (用于Restf ...
- 操作方法:具有多个Mongo存储库和Kotlin的Spring Boot 2 Web应用程序
首先,免责声明:如果您正在编写微服务 (每个人现在都对吗?)并希望它是惯用的 ,那么通常不会在其中使用几个不同的数据源. 图片取自Pixabay© https: //pixabay.com/illus ...
- 将Wiremock集成到Spring Boot Java Web应用程序中以模拟外部依赖关系
介绍 WireMock是用于基于HTTP的API的模拟服务器. 有些人可能会将其视为服务虚拟化工具或模拟服务器. 它使您能够存根所需的API或其他外部依赖项,以加快本地开发速度. 它支持测试真实API ...
- Web应用程序中的Spring JDBC入门
在上一篇文章中,我已经向您展示了如何设置基本的Spring 3 MVC Web应用程序 . 重复使用该项目设置作为模板,我将向您展示如何增强它以与JDBC一起使用. 有了它,您可以存储和检索数据库中的 ...
最新文章
- 嵌入式Web服务器移植
- OpenStack环境搭建(四:web控制端各节点的部署及配置)
- 【深度学习】一文看尽深度学习各领域最新突破
- golang channel 管道
- 应用程序 mysql 连接_学生信息管理系统之四:实现应用程序与数据库的连接
- linux下安装apache tomcat,Linux CentOS 7下 Apache Tomcat 7 安装与配置
- sharepoint2013以其他用户身份登录
- Git gitignore文件讲解
- centos 6.2安装mysql_CentOS 6.2下安装MySQL_服务器知识学堂-中关村在线
- spring security系列一:架构概述
- sam卡和sim卡区别_SAM卡槽是不是和SIM卡槽是一个东西,有高人知道么?
- RS485模块的介绍及引脚连线说明
- 国内主流Arduino图形化编程软件专业评测
- 吉林大学计算机学院高尚教授,高尚 - 吉林大学 - 计算机科学与技术学院
- 一款智能家居APP的雏形
- 用Java解决牛客网题目BC30kiki和酸奶
- ArcGIS简单的三维演示
- 帝国CMS(EmpireCMS) v7.5 后台XSS漏洞复现与原理分析
- 获取Golang环境变量的三种方式
- 不看OCJP考题你永远不知道自己的JAVA基础有多差(一)
热门文章
- jakarta ee_Jakarta EE贡献–入门
- java与java ee_Java EE MVC:处理表单验证
- 构建器设计模式_创新设计模式:构建器模式
- ip integrator_使用Oracle Data Integrator(和Kafka / MapR流)完善Lambda体系结构
- java cuba_CUBA平台–新的Java企业应用程序框架
- java 不同类型 映射_如何使用Java泛型映射不同的值类型
- js 使用多态替换条件语句_用多态和组成替换多个条件
- 用普罗米修斯和格拉法纳乐器来刺豪猪
- Nutshell中的Java 8语言功能-第2部分
- mockito 静态方法_Mockito –带有注释和静态方法的额外接口