spring 学习笔记
2017-07-13 20:43
197 查看
一. AOP
OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被称为横切(cross-cutting)代码,在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。AOP技术则恰恰相反,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块。
使用“横切”技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。Aop 的作用在于将核心关注点和横切关注点分离开来。
二。IOC/DI
DI(依赖注入)是IOC(控制反转)的另一种说法。所谓IOC,就是当A对象需要使用B对象时,不是自己创建,而是由spring容器提供。这个过程就相当于spring容器创建了B对象,将其注入到A对象中,供A对象使用。
所以控制反转IoC(Inversion
of Control)是说创建对象的控制权进行转移,以前创建对象的主动权和创建时机是由自己把控的,而现在这种权力转移到第三方,比如转移交给了IoC容器,它就是一个专门用来创建对象的工厂,你要什么对象,它就给你什么对象,有了
IoC容器,依赖关系就变了,原先的依赖关系就没了,它们都依赖IoC容器了,通过IoC容器来建立它们之间的关系。
IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。
意义:实现两者的解耦。
3.springmvc
4.配置文件
web.xml
load-on-startup:表示启动容器时初始化该Servlet;
url-pattern:表示哪些请求交给Spring Web MVC处理, “/” 是用来定义默认servlet映射的。也可以如“*.html”表示拦截所有以html为扩展名的请求。
格式定义:
[html] view
plain copy
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>contextConfigLocationValue></param-value>
</context-param>
作用:该元素用来声明应用范围(整个WEB项目)内的上下文初始化参数。
param-name 设定上下文的参数名称。必须是唯一名称
param-value 设定的参数名称的值
初始化过程:
在启动Web项目时,容器(比如Tomcat)会读web.xml配置文件中的两个节点<listener>和<contex-param>。
接着容器会创建一个ServletContext(上下文),应用范围内即整个WEB项目都能使用这个上下文。
接着容器会将读取到<context-param>转化为键值对,并交给ServletContext。
容器创建<listener></listener>中的类实例,即创建监听(备注:listener定义的类可以是自定义的类但必须需要继承ServletContextListener)。
在监听的类中会有一个contextInitialized(ServletContextEvent event)初始化方法,在这个方法中可以通过event.getServletContext().getInitParameter("contextConfigLocation") 来得到context-param 设定的值。在这个类中还必须有一个contextDestroyed(ServletContextEvent event) 销毁方法.用于关闭应用前释放资源,比如说数据库连接的关闭。
得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早。
由上面的初始化过程可知容器对于web.xml的加载过程是context-param >> listener >> fileter >> servlet
5.注解
@Autowired 注释
它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。
http://blog.csdn.net/heyutao007/article/details/5981555
6.spring IOC容器
在Spring中,bean是一个由Spring IoC容器进行实例化、装配和管理的对象。此外,bean只是你应用中许多对象中的一个。Beans以及他们之间的 依赖关系 是通过容器使用 配置元数据 反应出来。
IoC容器,并且负责上面提到的Beans的实例化、配置和装配。容器通过读取配置元数据获取对象如何实例化、配置和装配的指示。配置元数据可以用XML、Java注解或Java代码来描述。它允许你表示组成你应用的对象,以及对象间丰富的依赖关系。
使用容器:
结合4和6,web应用启动时,容器会首先去读取<listener>和<contex-param>这两个节点。其中ContextLoaderListener监听器会读取<context-param>标签下的配置文件,完成spring
IOC容器(webApplicationContext)的实例化和初始化。接着去读<fileter>和<servlet>,servlet也会有自己的webApplicationContext,并以先前的为父容器。
DispatcherServlet初始化的过程中会默认使用这些特殊bean进行配置。如果你想指定使用哪个特定的bean,你可以在web应用上下文WebApplicationContext中简单地配置它们。
http://www.techweb.com.cn/network/system/2017-07-19/2559714.shtml
http://www.cnblogs.com/brolanda/p/4265597.html
7. 事务
(1.用事务去控制的service,不能加try catch去捕获异常,否则不能被spring拦截到,事务就失效了。
(2.在Service实现类中增加@Transactional注解即可控制事务。
(3.事务的配置只有在 applicationContext.xml中才会起作用,即
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
必须配置在 applicationContext.xml 中
(4. 在Spring的服务的Bean中注解@
Transactional。这个注解表明每个方法都是Spring来管理的。如果方法成功处理,那么Spring就会提交事务;如果就去处理过程出现了错误,那么事务就会被回滚。这样,在数据库操作时,就不需要自己commit和roolback了。
8. <mvc:annotation-driven>
<mvc:annotation-driven/>相当于注册了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean,配置一些messageconverter。即解决了@Controller注解的使用前提配置。
我们今天研究的是<mvc:annotation-driven/>标签,所以我们找到对应的实现类是org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser
这个类主要是想容器注册若干bean实例,包括处理请求映射的,如处理@RequestMapping注解。将controller类的名字映射为请求URL。还有用来处理请求的。具体点说就是确定调用哪个Controller的哪个方法来处理当前请求。
我们主要说明里面的两个,RequestMappingHandlerMapping和RequestMappingHandlerAdapter。
第一个是HandlerMapping的实现类,它会处理@RequestMapping 注解,并将其注册到请求映射表中。
第二个是HandlerAdapter的实现类,它是处理请求的适配器,说白了,就是确定调用哪个类的哪个方法,并且构造方法参数,返回值。
9. springMvc里的mvc:resources与静态资源的访问
在进行spring MVC的配置时,通常我们会配置一个dispatcher
servlet用于处理对应的URL。配置如下:
[html] view
plain copy
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
这表示名字为mvc-dispatcher的servlet会处理一切的url对应的请求,那么我们怎么让servlet来处理项目中的静态资源呢?这里有两种方法。
1. 在dispatcher-servlet.xml中加入:
mapping:映射,通常是页面中写的src的url值
location:本地资源路径,注意必须是webapp根目录下的路径。
两个*,它表示映射resources/下所有的URL,包括子路径(即接多个/)
这样我们就可以直接访问该文件夹下的静态内容了。
相关:http://www.cnblogs.com/yank/p/4477204.html
10.springmvc 数据类型转换器
springmvc 通过反射机制对目标方法进行签名,并请求消息绑定到处理方法入参中。
springmvc将servletrequest对象和处理方法入参实例传给databinder, databinder调用装配在springmvc上下文的conversionService进行数据类型转换、数据格式化工作,将servletrequest对象中的消息填充到处理方法入参中。
数据类型转换:
conversionService是springmvc类型转换的核心接口,位于org.springframework.core.convert包中,可以利用org.springframework.context.support.ConversionServiceFactoryBean在spring上下文中定义一个ConversionSerivce。spring
自动识别出上下文中的ConversionService,并在Bean属性配置及springmvc处理方法入参绑定等场合使用它进行数据的转换。
http://blog.csdn.net/ljhabc1982/article/details/18703459
http://jinnianshilongnian.iteye.com/blog/1723270
11. spirng中@value的使用
在contextApplication.xml中加入以下配置:
在com.spring.common包下建立类:
相关:http://bbs.csdn.net/topics/390936459
12. StringHttpMessageConverter
当使用@ResponseBody返回的字符串带有中文时,返回类型为String会被StringHttpMessageConverter处理,当时查看源码发现默认的Charset DEFAULT_CHARSET使用的是ISO-8859-1
配置起效
方式一:
注:配置必须在 <mvc:annotation-driven /> 之前,否则将不会启效;<mvc:annotation-driven /> 会自动注册DefaultAnnotationHandlerMapping
与AnnotationMethodHandlerAdapter。
方式二:
13. intellij 出现“Usage of API documented as @since 1.6+”的解决办法
File ->Project Structure->Project Settings -> Modules -> 你的Module名字 -> Sources -> Language Level->选个默认的就行。
14.message-converter
(1.如果<mvc:annotation-driven>节点有子节点message-converters,那么它的转换器属性messageConverters也由这些子节点组成。
message-converters的子节点配置如下:
(2.message-converters子节点不存在或它的属性register-defaults为true的话,加入其他的转换器:ByteArrayHttpMessageConverter、StringHttpMessageConverter、ResourceHttpMessageConverter等。
request对象和处理方法参数实例 ->DataBinder, DataBinder调用ConversionService组件进行数据类型转换,数据格式化的工作,将request对象中的信息填充到入参对象中,并调用Validator组件对已绑定了请求消息数据的入参对象进行数据合法性检验,并最终生成数据绑定结果BindingResult对象,BindingResult包含了已完成数据绑定的入参对象,还包含相应的校验错误对象。
15: repositories
Maven 仓库的两个概念:本地仓库和远程仓库
本地仓库是远程仓库的一个缓冲和子集,当你构建Maven项目的时候,首先会从本地仓库查找资源,如果没有,那么Maven会从远程仓库下载到你本地仓库。这样在你下次使用的时候就不需要从远程下载了。如果你所需要的jar包版本在本地仓库没有,而且也不存在于远程仓库,Maven在构建的时候会报错,这种情况可能发生在有些jar包的新版本没有在Maven仓库中及时更新。
配置远程仓库:
可以在项目中的pom.xml中配置,也可以在~/.m2/setting.xml中配置。
参考:http://www.blogjava.net/baoyaer/articles/355040.html
错误记录:
1:spring中,关于“通配符的匹配很全面, 但无法找到元素 'context:component-scan' 的声明”的错误
解决:
在dispatcher-servlet.xml中的reference里添加上完整声明:
通过这个对应关系来选择你需要的mybatis-spring jar 包的版本
我之前使用的是spring 4.1+mybatis 3.4 + mybatis-spring 1.2.3,导致项目报错,mybatis 3.4改成3.3 版本后一切正常!!
4. could not autowire field
添加 监听器:
...
OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被称为横切(cross-cutting)代码,在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。AOP技术则恰恰相反,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块。
使用“横切”技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。Aop 的作用在于将核心关注点和横切关注点分离开来。
二。IOC/DI
DI(依赖注入)是IOC(控制反转)的另一种说法。所谓IOC,就是当A对象需要使用B对象时,不是自己创建,而是由spring容器提供。这个过程就相当于spring容器创建了B对象,将其注入到A对象中,供A对象使用。
所以控制反转IoC(Inversion
of Control)是说创建对象的控制权进行转移,以前创建对象的主动权和创建时机是由自己把控的,而现在这种权力转移到第三方,比如转移交给了IoC容器,它就是一个专门用来创建对象的工厂,你要什么对象,它就给你什么对象,有了
IoC容器,依赖关系就变了,原先的依赖关系就没了,它们都依赖IoC容器了,通过IoC容器来建立它们之间的关系。
IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。
意义:实现两者的解耦。
3.springmvc
4.配置文件
web.xml
<servlet> <servlet-name>chapter2</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>chapter2</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
load-on-startup:表示启动容器时初始化该Servlet;
url-pattern:表示哪些请求交给Spring Web MVC处理, “/” 是用来定义默认servlet映射的。也可以如“*.html”表示拦截所有以html为扩展名的请求。
格式定义:
[html] view
plain copy
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>contextConfigLocationValue></param-value>
</context-param>
作用:该元素用来声明应用范围(整个WEB项目)内的上下文初始化参数。
param-name 设定上下文的参数名称。必须是唯一名称
param-value 设定的参数名称的值
初始化过程:
在启动Web项目时,容器(比如Tomcat)会读web.xml配置文件中的两个节点<listener>和<contex-param>。
接着容器会创建一个ServletContext(上下文),应用范围内即整个WEB项目都能使用这个上下文。
接着容器会将读取到<context-param>转化为键值对,并交给ServletContext。
容器创建<listener></listener>中的类实例,即创建监听(备注:listener定义的类可以是自定义的类但必须需要继承ServletContextListener)。
在监听的类中会有一个contextInitialized(ServletContextEvent event)初始化方法,在这个方法中可以通过event.getServletContext().getInitParameter("contextConfigLocation") 来得到context-param 设定的值。在这个类中还必须有一个contextDestroyed(ServletContextEvent event) 销毁方法.用于关闭应用前释放资源,比如说数据库连接的关闭。
得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早。
由上面的初始化过程可知容器对于web.xml的加载过程是context-param >> listener >> fileter >> servlet
5.注解
@Autowired 注释
它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。
http://blog.csdn.net/heyutao007/article/details/5981555
6.spring IOC容器
org.springframework.beans和
org.springframework.context包是Spring框架IoC容器的基础。
BeanFactory接口提供了一个先进的配置机制能够管理任何类型的对象。
ApplicationContext(应用上下文) 是
BeanFactory的一个子接口。它增加了更方便的集成Spring的AOP功能、消息资源处理(使用国际化)、事件发布和特定的应用层,如在web应用层中使用的
WebApplicationContext。
在Spring中,bean是一个由Spring IoC容器进行实例化、装配和管理的对象。此外,bean只是你应用中许多对象中的一个。Beans以及他们之间的 依赖关系 是通过容器使用 配置元数据 反应出来。
org.springframework.context.ApplicationContext接口代表了Spring
IoC容器,并且负责上面提到的Beans的实例化、配置和装配。容器通过读取配置元数据获取对象如何实例化、配置和装配的指示。配置元数据可以用XML、Java注解或Java代码来描述。它允许你表示组成你应用的对象,以及对象间丰富的依赖关系。
使用容器:
ApplicationContext是智能的工厂接口,它能够维护注册不同beans和它们的依赖。通过使用
T getBean(String name, Class<T> requiredType)方法,你可以取得这些beans的实例。
// 创建并配置beans ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"services.xml", "daos.xml"}); // 取得配置的实例 PetStoreService service = context.getBean("petStore", PetStoreService.class); // 使用实例 List<String> userList = service.getUsernameList();
结合4和6,web应用启动时,容器会首先去读取<listener>和<contex-param>这两个节点。其中ContextLoaderListener监听器会读取<context-param>标签下的配置文件,完成spring
IOC容器(webApplicationContext)的实例化和初始化。接着去读<fileter>和<servlet>,servlet也会有自己的webApplicationContext,并以先前的为父容器。
DispatcherServlet初始化的过程中会默认使用这些特殊bean进行配置。如果你想指定使用哪个特定的bean,你可以在web应用上下文WebApplicationContext中简单地配置它们。
http://www.techweb.com.cn/network/system/2017-07-19/2559714.shtml
http://www.cnblogs.com/brolanda/p/4265597.html
7. 事务
(1.用事务去控制的service,不能加try catch去捕获异常,否则不能被spring拦截到,事务就失效了。
(2.在Service实现类中增加@Transactional注解即可控制事务。
(3.事务的配置只有在 applicationContext.xml中才会起作用,即
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
必须配置在 applicationContext.xml 中
(4. 在Spring的服务的Bean中注解@
Transactional。这个注解表明每个方法都是Spring来管理的。如果方法成功处理,那么Spring就会提交事务;如果就去处理过程出现了错误,那么事务就会被回滚。这样,在数据库操作时,就不需要自己commit和roolback了。
8. <mvc:annotation-driven>
<mvc:annotation-driven/>相当于注册了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean,配置一些messageconverter。即解决了@Controller注解的使用前提配置。
我们今天研究的是<mvc:annotation-driven/>标签,所以我们找到对应的实现类是org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser
这个类主要是想容器注册若干bean实例,包括处理请求映射的,如处理@RequestMapping注解。将controller类的名字映射为请求URL。还有用来处理请求的。具体点说就是确定调用哪个Controller的哪个方法来处理当前请求。
我们主要说明里面的两个,RequestMappingHandlerMapping和RequestMappingHandlerAdapter。
第一个是HandlerMapping的实现类,它会处理@RequestMapping 注解,并将其注册到请求映射表中。
第二个是HandlerAdapter的实现类,它是处理请求的适配器,说白了,就是确定调用哪个类的哪个方法,并且构造方法参数,返回值。
9. springMvc里的mvc:resources与静态资源的访问
在进行spring MVC的配置时,通常我们会配置一个dispatcher
servlet用于处理对应的URL。配置如下:
[html] view
plain copy
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
这表示名字为mvc-dispatcher的servlet会处理一切的url对应的请求,那么我们怎么让servlet来处理项目中的静态资源呢?这里有两种方法。
1. 在dispatcher-servlet.xml中加入:
<!-- 静态资源访问 --> <mvc:default-servlet-handler/>2. 资源映射
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory --> <resources mapping="/resources/**" location="/resources/" /> <resources mapping="/images/**" location="/images/" /> <resources mapping="/js/**" location="/js/" />
mapping:映射,通常是页面中写的src的url值
location:本地资源路径,注意必须是webapp根目录下的路径。
两个*,它表示映射resources/下所有的URL,包括子路径(即接多个/)
这样我们就可以直接访问该文件夹下的静态内容了。
相关:http://www.cnblogs.com/yank/p/4477204.html
10.springmvc 数据类型转换器
springmvc 通过反射机制对目标方法进行签名,并请求消息绑定到处理方法入参中。
springmvc将servletrequest对象和处理方法入参实例传给databinder, databinder调用装配在springmvc上下文的conversionService进行数据类型转换、数据格式化工作,将servletrequest对象中的消息填充到处理方法入参中。
数据类型转换:
conversionService是springmvc类型转换的核心接口,位于org.springframework.core.convert包中,可以利用org.springframework.context.support.ConversionServiceFactoryBean在spring上下文中定义一个ConversionSerivce。spring
自动识别出上下文中的ConversionService,并在Bean属性配置及springmvc处理方法入参绑定等场合使用它进行数据的转换。
http://blog.csdn.net/ljhabc1982/article/details/18703459
http://jinnianshilongnian.iteye.com/blog/1723270
11. spirng中@value的使用
在contextApplication.xml中加入以下配置:
<context:component-scan base-package=" com.spring.common"/> <bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:properties/jdbc.properties</value> </list> </property> </bean>
在com.spring.common包下建立类:
@Component public class test { public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } @Value("${jdbc.url}") private String url; }
相关:http://bbs.csdn.net/topics/390936459
12. StringHttpMessageConverter
当使用@ResponseBody返回的字符串带有中文时,返回类型为String会被StringHttpMessageConverter处理,当时查看源码发现默认的Charset DEFAULT_CHARSET使用的是ISO-8859-1
<bean id="objectToStringHttpMessageConverter" class="org.springframework.http.converter.ObjectToStringHttpMessageConverter"> <constructor-arg index="0"> <value>UTF-8</value> </constructor-arg> <property name="supportedMediaTypes"> <list> <value>text/plain;charset=UTF-8</value> <value>text/xml;charset=UTF-8</value> </list> </property> <property name="writeAcceptCharset" value="false"/> </bean>
配置起效
方式一:
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="objectToStringHttpMessageConverter"/> <ref bean="jackson2HttpMessageConverter"/> </list> </property> </bean> <mvc:annotation-driven />
注:配置必须在 <mvc:annotation-driven /> 之前,否则将不会启效;<mvc:annotation-driven /> 会自动注册DefaultAnnotationHandlerMapping
与AnnotationMethodHandlerAdapter。
方式二:
<mvc:annotation-driven> <mvc:message-converters> <ref bean="objectToStringHttpMessageConverter"/> <ref bean="jackson2HttpMessageConverter"/> </mvc:message-converters> </mvc:annotation-driven>
13. intellij 出现“Usage of API documented as @since 1.6+”的解决办法
File ->Project Structure->Project Settings -> Modules -> 你的Module名字 -> Sources -> Language Level->选个默认的就行。
14.message-converter
(1.如果<mvc:annotation-driven>节点有子节点message-converters,那么它的转换器属性messageConverters也由这些子节点组成。
message-converters的子节点配置如下:
(2.message-converters子节点不存在或它的属性register-defaults为true的话,加入其他的转换器:ByteArrayHttpMessageConverter、StringHttpMessageConverter、ResourceHttpMessageConverter等。
request对象和处理方法参数实例 ->DataBinder, DataBinder调用ConversionService组件进行数据类型转换,数据格式化的工作,将request对象中的信息填充到入参对象中,并调用Validator组件对已绑定了请求消息数据的入参对象进行数据合法性检验,并最终生成数据绑定结果BindingResult对象,BindingResult包含了已完成数据绑定的入参对象,还包含相应的校验错误对象。
15: repositories
Maven 仓库的两个概念:本地仓库和远程仓库
本地仓库是远程仓库的一个缓冲和子集,当你构建Maven项目的时候,首先会从本地仓库查找资源,如果没有,那么Maven会从远程仓库下载到你本地仓库。这样在你下次使用的时候就不需要从远程下载了。如果你所需要的jar包版本在本地仓库没有,而且也不存在于远程仓库,Maven在构建的时候会报错,这种情况可能发生在有些jar包的新版本没有在Maven仓库中及时更新。
配置远程仓库:
可以在项目中的pom.xml中配置,也可以在~/.m2/setting.xml中配置。
参考:http://www.blogjava.net/baoyaer/articles/355040.html
错误记录:
1:spring中,关于“通配符的匹配很全面, 但无法找到元素 'context:component-scan' 的声明”的错误
解决:
在dispatcher-servlet.xml中的reference里添加上完整声明:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">[/code] 添加上最后两行后,无bug。
2. 在spring MVC开发中, 开发人员可能会设置某个值到 model 中, 并通过EL表达式在JSP显示, 例如: ${msg}, 但并没有解析为对应的 “value”, 输出结果还是老样子: ${msg}。
解决:
在 Spring MVC 的入门项目中, 这是最常见的问题。实际上这是因为使用了 JSP 1.2 规范引起的。
1. 使用JSP 1.2 定义格式
如果您使用了 老旧的JSP 1.2描述方式, 即使用了 DTD 定义:
web.xml<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> //... </web-app>
这种情况下, EL表达式默认是禁用或者忽略的, 必须手动启用,才会输出 model 中的值。示例如下:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <%@ page isELIgnored="false" %> </head> <body> ${msg} </body> </html>
可以看到,其中使用了<%@ page isELIgnored="false" %>来开启 EL 表达式;
3. java.lang.AbstractMethodError:
org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer; 报错解决
在mybatis+spring整合中,由于版本的问题会报错:
关于这种问题的根源可以查看mybatis的官网对于mybatis—spring jar包版本的应用
MyBatis-Spring | MyBatis | Spring |
---|---|---|
1.0.0 and 1.0.1 | 3.0.1 to 3.0.5 | 3.0.0 or higher |
1.0.2 | 3.0.6 | 3.0.0 or higher |
1.1.0 or higher | 3.1.0 or higher | 3.0.0 or higher |
1.3.0 or higher | 3.4.0 or higher | 3.0.0 or higher |
我之前使用的是spring 4.1+mybatis 3.4 + mybatis-spring 1.2.3,导致项目报错,mybatis 3.4改成3.3 版本后一切正常!!
4. could not autowire field
添加 监听器:
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
...
相关文章推荐
- Spring学习笔记:1、概念理解
- ★(转)Spring学习笔记1
- Spring学习笔记二
- Spring学习笔记
- 学习Struts+spring+Hibernate的笔记.
- Spring 学习笔记 (二)--AOP
- 学习Struts+spring+hibernate的笔记
- Spring的AOP学习笔记
- Spring in Action 学习笔记—开始Spring之旅
- Spring学习笔记一
- spring学习笔记(1)
- Spring学习笔记:第三章 IoC中的国际化
- Spring学习笔记:第二章 Spring中IoC的入门实例
- Spring in Action 学习笔记—第一章 开始Spring之旅(转贴)
- Spring学习笔记(一)
- Spring学习笔记:第三章 IoC中的国际化
- Professional Java Development with the Spring Framework学习笔记(1) - JdbcTemplate
- Spring学习笔记:1、概念理解
- Spring学习笔记:2-Spring中IoC的入门实例
- Spring学习笔记:1、概念理解