我是靠谱客的博主 兴奋果汁,最近开发中收集的这篇文章主要介绍Spring配置文件的那些XML标签,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

<import>

<!-- applicationContext.xml文件中使用import的方式导入有模块配置文件 -->	
<import resource=""/>	

<context:annotation-config>

在传统声明方式中,类似这样的注入IOC容器中:

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor "/> 
  • 如果想使用@ Resource 、@ PostConstruct、@ PreDestroy等注解就必须声明CommonAnnotationBeanPostProcessor。
  • 如果想使用@PersistenceContext注解,就必须声明PersistenceAnnotationBeanPostProcessor的Bean。
  • 如果想使用@Autowired注解,那么就必须事先在 Spring 容器中声明 AutowiredAnnotationBeanPostProcessor Bean。
  • 如果想使用 @Required的注解,就必须声明RequiredAnnotationBeanPostProcessor的Bean。

而使用context:annotation-config就可以隐式地自动向Spring容器注册4个BeanPostProcessor:

AutowiredAnnotationBeanPostProcessor
CommonAnnotationBeanPostProcessor
PersistenceAnnotationBeanPostProcessor
RequiredAnnotationBeanPostProcessor 

这样就可以使用@ Resource 、@ PostConstruct、@ PreDestroy、@PersistenceContext、@Autowired、@Required等注解了,就可以实现自动注入
注册这4个 BeanPostProcessor的作用,就是为了你的系统能够识别相应的注解。

<context:component-scan>

<context:component-scan base-package="com.**.impl"/>

Spring给我们提供了context:annotation-config 的简化的配置方式,自动帮助你完成声明,并且还自动搜索@Component , @Controller , @Service , @Repository等标注的类。

context:component-scan除了具有context:annotation-config的功能之外,context:component-scan还可以在指定的package下扫描以及注册javabean 。还具有自动将带有@component,@service,@Repository等注解的对象注册到spring容器中的功能。

因此当使用 context:component-scan 后,就可以将 context:annotation-config移除。

context:component-scan的子标签包含了:

<context:exclude-filter type="" expression=""/>
<context:include-filter type="" expression=""/>/ 

context:exclude-filter:告知哪些类或者接口不需要被扫描。

context:include-filter:告知哪些类或者接口需要被扫描,并注册成bean类。

<context:property-placeholder>

在开发企业应用期间,或者在将企业应用部署到生产环境时,应用依赖的很多参数信息往往需要调整,比如LDAP连接、RDBMS JDBC连接信息。对这类信息进行外在化管理显得格外重要。

PropertyPlaceholderConfigurer和PropertyOverrideConfigurer对象,它们正是担负着外在化配置应用参数的重任。

spring 3.0 后提供了 注解配置引入,<context:property-placeholder/>,配置如下:

<context:property-placeholder location="classpath:jdbc.properties"/>

这里location值为参数配置文件的位置,参数配置文件通常放在src或resources(Maven项目)目录下,而参数配置文件的格式跟java通用的参数配置文件相同,即键值对的形式,例如:

#jdbc配置

test.jdbc.driverClassName=com.mysql.jdbc.Driver
test.jdbc.url=jdbc:mysql://localhost:3306/test
test.jdbc.username=root
test.jdbc.password=root

如果有多个配置文件,则需要用英文逗号","隔开,如下:

<context:property-placeholder location="classpath:jdbc.properties;classpath:monitor.properties"/>

值得注意的是:多个配置文件将依次加载,如果后一个文件中有和前面某一个文件中属性名是相同的,最终取的值是后加载的值。
<context:property-override/>

<!-- 这样会自动地用properties文件中定义的属性覆盖spring配置文件中同名的属性值。 -->
<context:property-override location="..."/> 

<util:constant>

比如某类存在如下字段定义:

public static final String hwStatic = "hello static constant"; 

如果希望以上属性取值作为受管Bean,可以如下配置:

<util:constant id="hwConstant" static-field="test.HelloWorld.hwStatic"/>  

这样就将java代码中的常量hwStatic(在test包下的HelloWorld类中)配置给spring进行管理,id为另起的名字。

又如:

<util:constant id="maxValue" static-field="java.lang.Integer.MAX_VALUE"/>  

<util:list>

<util:list id="listUtil" list-class="java.util.ArrayList">  
    <value>first</valuse>  
    <value>two</valuse>  
    <value>three</valuse>  
    <value>ten</valuse>  
</util:list> 

它的作用就是在spring启动初始化bean时,给listUtil这个list赋值为这四个值。 

<util:map>

<!-- 使用util:map定义一个Map集合,指定使用TreeMap作为实现类,如果不指定默认使用HashMap作为实现类 -->
<util:map id="chin.scores" map-class="java.util.TreeMap">
   <entry key="数学" value="87"/>
   <entry key="英语" value="89"/>
   <entry key="语文" value="82"/>
</util:map>

<util:properties>

<util:properties id="xxx" location="classpath:xxxxx.properties">  

"classpath:"表明,将从类路径上查找并装载xxx属性文件。

<util:property-path>

<util:property-path path="helloWorld.hello"/>
<bean id="helloWorld" class="test.HelloWorld">
	<property name="hello" value="hi"/>
</bean>

这里path="helloworld.hello"就是指bean为"helloworld"的属性hello。

<util:set>

<!-- 使用util:set定义一个Set集合,指定使用HashSet作为实现类,如果不指定默认使用HashSet作为实现类-->
<util:set id="chin.axes" set-class="java.util.HashSet">
   <!-- 每个value、ref、bean...配置一个Set元素 -->
   <value>字符串</value>
   <bean class="org.crazyit.app.service.impl.SteelAxe"/>
   <ref bean="stoneAxe"/>
</util:set>

<jdbc:embedded-database>

嵌入式数据源作为应用的一部分运行,非常适合在开发和测试环境中使用,但是不适合用于生产环境。因为在使用嵌入式数据源的情况下,你可以在每次应用启动或者每次运行单元测试之前初始化测试数据。

使用Spring的jdbc名字空间配置嵌入式数据源非常简单,下列代码显示了如何使用jdbc名字空间配置嵌入式的H2数据库,并配置需要初始化的数据。

<jdbc:embedded-database id="dataSource" type="H2">
    <jdbc:script location="classpath*:schema.sql" />
    <jdbc:script location="classpath*:test-data.sql" />
</jdbc:embedded-database>

<jdbc:embedded-database>type属性设置为H2表明嵌入式数据库的类型是H2数据库(确保引入了H2的依赖库)。在<jdbc:embedded-database>配置中,可以配置多个<jdbc:script>元素,用于设置和初始化数据库:在这个例子中,schema.sql文件中包含用于创建数据表的关系;test-data.sql文件中用于插入测试数据。

如果你使用JavaConfig,则可以使用EmbeddedDatabaseBuilder构建嵌入式数据源:

@Bean
public DataSource dataSource() {
    return new EmbeddedDatabaseBuilder()
            .setType(EmbeddedDatabaseType.H2)
            .addScript("classpath*:schema.sql")
            .addScript("classpath*:test-data.sql")
            .build();
}

可以看出,setType()方法的作用等同于<jdbc:embedded-database>元素的type属性,addScript()方法的作用等同于<jdbc:script>元素。

<jdbc:initialize-database>

在项目启动的时候对数据库的初始化操作。

<jdbc:initialize-database data-source="dataSource" enabled="true"  ignore-failures="NONE" separator="@@">
	<jdbc:script location="classpath:com/foo/sql/db-schema.sql"/>
	<jdbc:script location="classpath:com/foo/sql/db-test-data.sql"/>
</jdbc:initialize-database>

dataSource配置好的数据源。

enabled 是用来表明初始化数据库是否执行。这个enabled的值是一个boolean值,true或false。

ignore-failures有三个值:NONE,DROPS,ALL

  • 设置为NONE时,不忽略任何错误,当sql执行报错时服务启动终止。
  • 设置为DROPS时,忽略删除错误,如当sql中有一个删除表而表不存在,此时这个错误会被忽略。
  • 设置为ALL时,忽略任何错误。

separator分隔标识,可配置,该参数可以配置在jdbc:initialize-database中,会对所有script起作用,当然也可以在jdbc:script中单个配置。当jdbc:script配置之后,则该script的分隔符使用jdbc:script配置中的。

<jee:jndi-lookup>

<jee:local-slsb>

<jee:remote-slsb>

<cache:annotation-driven>

<cache:advice>

<task:annotation-driven>

设置启用定时任务。

<task:executor>

<task:scheduled-tasks>

<task:scheduler>

<tx:annotation-driven>

<tx:advice>

<tx:jta-transaction-manager>

* <mvc:annotation-driven>

<mvc:annotation-driven /> 是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案。

<mvc:annotation-driven /> 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)。

我们处理响应ajax请求时,就使用到了对json的支持。

对action写JUnit单元测试时,要从spring IOC容器中取DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,来完成测试,取的时候要知道是<mvc:annotation-driven />这一句注册的这两个bean。

<mvc:annotation-driven />下面有这么几个子标签:

  • <mvc:argument-resolvers>
  • <mvc:async-support>
  • <mvc:message-converters>
  • <mvc:path-matching>
  • <mvc:return-value-handlers>

(1) <mvc:message-converters>

配置一个或多个HttpMessageConverter类型以用于转换@RequestBody方法参数和@ResponseBody方法返回值。使用此配置元素是可选的。此处提供的HttpMessageConverter注册将优先于注册的HttpMessageConverter类型。默认情况下。如果要完全关闭默认注册,请参阅register-defaults属性。

Spring中提供了org.springframework.http.converter.HttpMessageConverter的很多实现类。

(2) <mvc:return-value-handlers>

HandlerMethodReturnValueHandler是RequestMappingHandlerAdapter用来处理当含有@RequestMapping的方法调度完成后,后面要进行的事情。  

<mvc:annotation-driven>  
	<mvc:return-value-handlers>  
		<bean class="org.springframework.web.servlet.mvc.method.annotation.ModelAndViewMethodReturnValueHandler"></bean>  
	</mvc:return-value-handlers>  
</mvc:annotation-driven>  

<mvc:default-servlet-handler>

在spring mvc配置文件中配置<mvc:default-servlet-handler />后,会在Spring MVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理。

一般Web应用服务器默认的Servlet名称是"default",因此DefaultServletHttpRequestHandler可以找到它。如果你所有的Web应用服务器的默认Servlet名称不是"default",则需要通过default-servlet-name属性显示指定:

<mvc:default-servlet-handler default-servlet-name="所使用的Web服务器默认使用的Servlet名称" />

<mvc:resources>

<mvc:default-servlet-handler />将静态资源的处理经由Spring MVC框架交回Web应用服务器处理。而<mvc:resources />更进一步,由Spring MVC框架自己处理静态资源,并添加一些有用的附加值功能。

首先,<mvc:resources />允许静态资源放在任何地方,如WEB-INF目录下、类路径下等,你甚至可以将JavaScript等静态文件打到JAR包中。通过location属性指定静态资源的位置,由于location属性是Resources类型,因此可以使用诸如"classpath:"等的资源前缀指定资源位置。传统Web容器的静态资源只能放在Web容器的根路径下,<mvc:resources />完全打破了这个限制。

其次,<mvc:resources />依据当前著名的Page Speed、YSlow等浏览器优化原则对静态资源提供优化。你可以通过cacheSeconds属性指定静态资源在浏览器端的缓存时间,一般可将该时间设置为一年,以充分利用浏览器端的缓存。在输出静态资源时,会根据配置设置好响应报文头的Expires 和 Cache-Control值。

在接收到静态资源的获取请求时,会检查请求头的Last-Modified值,如果静态资源没有发生变化,则直接返回304相应状态码,提示客户端使用浏览器缓存的数据,而非将静态资源的内容输出到客户端,以充分节省带宽,提高程序性能。

配置如下:

<mvc:resources location="/,classpath:/META-INF/publicResources/" mapping="/resources/**"/>

以上配置将Web根路径"/"及类路径下 /META-INF/publicResources/ 的目录映射为/resources路径。假设Web根路径下拥有images、js这两个资源目录,在images下面有bg.gif图片,在js下面有test.js文件,则可以通过 /resources/images/bg.gif 和 /resources/js/test.js 访问这二个静态资源。

假设WebRoot还拥有images/bg1.gif 及 js/test1.js,则也可以在网页中通过 /resources/images/bg1.gif 及 /resources/js/test1.js 进行引用。

<mvc:interceptors>

拦截由控制器处理的请求,允许在处理之前/之后对请求进行预处理/后处理。

每个拦截器必须实现org.springframework.web.servlet.HandlerInterceptor或org.springframework.web.context.request.WebRequestInterceptor接口。

<mvc:interceptors>
   <!-- 日志拦截器 -->
   <mvc:interceptor>
    <mvc:mapping path="/**" />
    <mvc:exclude-mapping path="/static/**" />
    <bean class="拦截器java代码路径" />
   </mvc:interceptor>
 </mvc:interceptors>

① mvc:mapping 拦截器路径配置

② mvc:exclude-mapping 拦截器不需要拦截的路径

<mvc:cors>

在开发APP过程中,APP调用后端接口有跨域的问题,只要在spring-mvc.xml 文件中加入下面的配置即可:

<!-- 解决API接口跨域问题配置 Spring MVC 版本必须是 4.2 及以上 -->
<mvc:cors>
    <mvc:mapping path="/**"
    allowed-origins="*"
    allowed-methods="POST, GET, OPTIONS, DELETE, PUT"
    allowed-headers="Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"
    allow-credentials="true"
    max-age="3600" />
</mvc:cors>

<mvc:redirect-view-controller>

将简单(无逻辑)视图控制器映射到给定的URL路径(或模式),以便重定向到另一个URL。如:首页。

如果不设置状态码,模拟是302。

<mvc:redirect-view-controller
		path="/redirect"
		redirect-url="/status"
		context-relative="true"
		status-code="301"
		keep-query-params="true"/>

<mvc:status-controller>

状态控制器标签。

<mvc:status-controller path="/status" status-code="200"/>  

<mvc:view-controller>

将简单(无逻辑)视图控制器映射到特定的URL路径(或模式),以便使用预先配置的状态代码和视图呈现响应,如果不设置状态码,默认是200。

<mvc:view-controller path="/" view-name="redirect:/index" />

<mvc:view-resolvers>

视图解析器。

<mvc:view-resolvers>的解析类是 ViewResolversBeanDefinitionParser。

<!-- 配置视图解析器-->
<mvc:view-resolvers>
    <mvc:content-negotiation>
        <mvc:default-views>
            <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
                <property name="jsonpParameterNames">
                    <set>
                        <value>jsonp</value>
                        <value>callback</value>
                    </set>
                </property>
            </bean>
        </mvc:default-views>
    </mvc:content-negotiation>
    <!-- JSP的视图解析器-->
    <mvc:jsp prefix="/WEB-INF/views/"/>
</mvc:view-resolvers>

<aop:aspectj-autoproxy>

<aop:config>

<aop:scoped-proxy>

最后

以上就是兴奋果汁为你收集整理的Spring配置文件的那些XML标签的全部内容,希望文章能够帮你解决Spring配置文件的那些XML标签所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部