博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring 部分配置内容备忘
阅读量:4316 次
发布时间:2019-06-06

本文共 5634 字,大约阅读时间需要 18 分钟。

部分资料来源:

context:component-scan

@Component是所有受Spring管理组件的通用形式,而 @Repository, @Service和 @Controller则是 @Component的细化,用来表示更具体的用例(例如,分别对应了持久化层、服务层和表现层)。

在xml配置了这个标签后,spring可以自动去扫描base-package下面或者子包下面的Java文件,如果扫描到有 @Component @Controller @Service等这些注解的类,则把这些类注册为bean。
在说明这两个子标签前,先说一下有一个use-default-filters属性,该属性默认为true,这就意味着会扫描指定包下的全部的标有 @Component的类,并注册成bean.也就是 @Component的子注解 @Service, @Reposity等。

扫描com.champion.ssqs.core.test_spring下全部标有 @Component的类,包括 @Controller, @Service, @Reposity等。

如果use-default-filters属性设置为false 则需要在中配置要扫描的注解,来扫描对应的注解。

扫描com.champion.ssqs.core.test_spring下全部标有 @Service的类,其余不扫描。

扫描com.champion.ssqs.core.test_spring下全部没有标有 @Controller的类,其余不扫描。

HandlerMapping,HandlerAdapter

是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案。 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。

实际上在3.1之后,注册的类发生了变化
Spring Framework 3.1 introduces a new set of support classes for processing requests with annotated controllers:

RequestMappingHandlerMapping

RequestMappingHandlerAdapter
ExceptionHandlerExceptionResolver

These classes are a replacement for the existing:

DefaultAnnotationHandlerMapping

AnnotationMethodHandlerAdapter
AnnotationMethodHandlerExceptionResolver

The above registers a RequestMappingHandlerMapping , a RequestMappingHandlerAdapter , and an ExceptionHandlerExceptionResolver (among others) in support of processing requests with annotated controller methods using annotations such as

@RequestMapping , @ExceptionHandler , and others.

It also enables the following:

Spring 3 style type conversion through a ConversionService instance in addition to the JavaBeans PropertyEditors used for Data Binding.

Support for formatting Number fields using the @NumberFormat annotation through the ConversionService .

Support for formatting Date, Calendar, Long, and Joda Time fields using the @DateTimeFormat annotation.

Support for validating @Controller inputs with @Valid , if a JSR-303 Provider is present on the classpath.

HttpMessageConverter support for @RequestBody method parameters and @ResponseBody method return values from @RequestMapping or @ExceptionHandler methods.

This is the complete list of HttpMessageConverters set up by mvc:annotation-driven:

ByteArrayHttpMessageConverter converts byte arrays.

StringHttpMessageConverter converts strings.

ResourceHttpMessageConverter converts to/from org.springframework.core.io.Resource for all media types.

SourceHttpMessageConverter converts to/from a javax.xml.transform.Source .

FormHttpMessageConverter converts form data to/from a MultiValueMap<String, String> .

Jaxb2RootElementHttpMessageConverter converts Java objects to/from XML — added if JAXB2 is present on the classpath.

MappingJackson2HttpMessageConverter (or MappingJacksonHttpMessageConverter ) converts to/from JSON — added if Jackson 2 (or Jackson) is present on the classpath.

AtomFeedHttpMessageConverter converts Atom feeds — added if Rome is present on the classpath.

RssChannelHttpMessageConverter converts RSS feeds — added if Rome is present on the classpath.

这是摘取的官方文档

HandlerMapping接口的实现(常见类型) :

BeanNameUrlHandlerMapping :通过对比url和bean的name找到对应的对象

SimpleUrlHandlerMapping :也是直接配置url和对应bean,比BeanNameUrlHandlerMapping功能更多
DefaultAnnotationHandlerMapping : 主要是针对注解配置 @RequestMapping的,已过时
RequestMappingHandlerMapping(3.2之前是使用DefaultAnnotationHandlerMapping 这个去处理,但是后来弃用了) :取代了上面一个,现在默认的请求匹配方式,通过 @RequestMapping 注解来决定调用方法和具体的类,也是最常用的一种

如果没有明确声明任何处理器映射,spring会默认使用BeanNameUrlHandlerMapping,但如果明确声明了其它的处理器映射,则需要将BeanNameUrlHandlerMapping明确声明出来,而且在每个包含被映射的bean的配置文件中都要加入BeanNameUrlHandlerMapping

HandlerAdapter 接口实现:

HttpRequestHandlerAdapter : 要求handler实现HttpRequestHandler接口,该接口的方法为 void handleRequest(HttpServletRequest request, HttpServletResponse response)也就是 handler必须有一个handleRequest方法。
SimpleControllerHandlerAdapter:要求handler实现Controller接口,该接口的方法为ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response),也就是本工程采用的
AnnotationMethodHandlerAdapter :和上面的DefaultAnnotationHandlerMapping配对使用的,也已过时
RequestMappingHandlerAdapter : 和上面的RequestMappingHandlerMapping配对使用,针对 @RequestMapping

举例如下:

spring.xml配置
controller内容public class HomeAction implements Controller{ @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { return new ModelAndView("hello"); } }

先简单的说下这个工程的流程,访问http://localhost:8080/index首先由DispatcherServlet进行转发,通过BeanNameUrlHandlerMapping(含有 /index->HomeAction的配置),找到了HomeAction,然后再拿HomeAction和每个adapter进行适配,由于HomeAction实现了Controller接口,所以最终会有SimpleControllerHandlerAdapter来完成对HomeAction的handleRequest方法的调度。然后就顺利的执行了我们想要的方法。

url-pattern /和/*的区别

< url-pattern > / </ url-pattern > 不会匹配到*.jsp,即:*.jsp不会进入spring的 DispatcherServlet类 。

< url-pattern > /* </ url-pattern > 会匹配*.jsp,会出现返回jsp视图时再次进入spring的DispatcherServlet 类,导致找不到对应的controller所以报404错。

总之,关于web.xml的url映射的小知识:

/ 会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url
/* 会匹配所有url:路径型的和后缀型的url(包括/login,*.jsp,*.js和*.html等)

IOC(DI)

IOC理论的意义就是将复杂的对象间的关系分解成相互合作的对象,通过封装,对象类实现对外部是透明的,从而降低了问题的复杂度,而且还可以灵活的被重用和扩展(将对象 间的耦合关系断开,控制权全部交由第三方,所以IOC容器是整个系统的关键核心。

依赖注入:

IOC的另外名字叫做依赖注入(Dependency Injection),所谓的依赖注入,就是由IOC容器在运行期间,动态的将某种依赖关系注入到对象中,所以,依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象见的解耦。

IOC的好处:

IOC在编程过程中不会对业务对象构成很强的侵入性,使用IOC之后,对象具有更好的可实行性,可重用性和可扩展性:
1、 降低组件之间的耦合性
2、 提高开发效率和产品质量
3、 统一标准,提高模块的可复用性
4、 模块具有热插拔特性

IOC的通俗理解:

1、 IOC控制反转:说的是创建对象实例的控制权从代码控制剥离到IOC容器控制,实际就是你在XML文件控制,侧重于原理
2、 DI依赖注入:说的是创建对象实例时,为这个对象注入属性值或其他对象实例,侧重于实现

转载于:https://www.cnblogs.com/cuiyf/p/6846808.html

你可能感兴趣的文章
Array.of使用实例
查看>>
【Luogu】P2498拯救小云公主(spfa)
查看>>
如何获取网站icon
查看>>
几种排序写法
查看>>
java 多线程的应用场景
查看>>
dell support
查看>>
转:Maven项目编译后classes文件中没有dao的xml文件以及没有resources中的配置文件的问题解决...
查看>>
MTK android 设置里 "关于手机" 信息参数修改
查看>>
单变量微积分笔记6——线性近似和二阶近似
查看>>
补几天前的读书笔记
查看>>
HDU 1829/POJ 2492 A Bug's Life
查看>>
CKplayer:视频推荐和分享插件设置
查看>>
CentOS系统将UTC时间修改为CST时间
查看>>
redis常见面试题
查看>>
导航控制器的出栈
查看>>
玩转CSS3,嗨翻WEB前端,CSS3伪类元素详解/深入浅出[原创][5+3时代]
查看>>
iOS 9音频应用播放音频之播放控制暂停停止前进后退的设置
查看>>
Delphi消息小记
查看>>
HNOI2016
查看>>
JVM介绍
查看>>