概述
<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标签所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复