注解开发--高级

1    Validation(了解)

 

         b/s系统中对http请求数据的校验多数在客户端进行,这也是出于简单及用户体验性上考虑,但是在一些安全性要求高的系统中服务端校验是不可缺少的,本节主要学习springmvc实现控制层添加校验。

         Spring3支持JSR-303验证框架,JSR-303 是JAVA EE 6 中的一项子规范,叫做BeanValidation,官方参考实现是Hibernate Validator(与Hibernate ORM 没有关系),JSR 303 用于对Java Bean 中的字段的值进行验证。

        

        

1.1  需求

         在商品信息修改提交时对商品信息内容进行校验,例如商品名称必须输入,价格合法性校验。

 

1.2  加入jar包


1.3  配置validator

 

<!--校验器 -->

<beanid="validator"

       class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">

      <!--校验器-->

       <property name="providerClass"value="org.hibernate.validator.HibernateValidator"/>

       <!--指定校验使用的资源文件,如果不指定则默认使用classpath下的ValidationMessages.properties -->

       <property name="validationMessageSource"ref="messageSource"/>

    </bean>

<!--校验错误信息配置文件 -->

    <bean id="messageSource"

        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">

      <!--资源文件名-->

       <property name="basenames">  

        <list>   

            <value>classpath:CustomValidationMessages</value>

        </list>  

        </property>

      <!-- 资源文件编码格式 -->

       <property name="fileEncodings"value="utf-8"/>

      <!-- 对资源文件内容缓存时间,单位秒 -->

       <property name="cacheSeconds"value="120"/>

    </bean>

   

 

 

 

1.4  将validator加到处理器适配器

 

1.4.1 配置方式1

    <mvc:annotation-driven validator="validator"></mvc:annotation-driven>

 

1.4.2 配置方式2(自学)

<!--自定义webBinder -->

    <bean id="customBinder"

       class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">

       <property name="validator"ref="validator"/>

    </bean>

 

<!--注解适配器 -->

    <bean

    class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">

       <property name="webBindingInitializer"ref="customBinder"></property>

    </bean>

 

1.4  添加验证规则

 

publicclass Items {

    private Integerid;

    @Size(min=1,max=30,message="{item.name.length.error}")

    private Stringname;

   

    @NotEmpty(message="{pic.is.null}")

    private Stringpic;

 

1.6  错误消息文件CustomValidationMessages

 

item.name.length.error=商品名称在130个字符之间

pic.is.null=请上传图片

 

如果在eclipse中编辑properties文件无法看到中文则参考“Eclipse开发环境配置-indigo.docx”添加propedit插件。

 

1.7  捕获错误

 

修改Controller方法:

//商品修改提交

    @RequestMapping("/editItemSubmit")

    public String editItemSubmit(@Validated@ModelAttribute("item") Itemsitems,BindingResult result,

           @RequestParam("pictureFile") MultipartFile[] pictureFile,Model model)

           throws Exception {

   //如果存在校验错误则转到商品修改页面

       if (result.hasErrors()) {

           List<ObjectError> errors = result.getAllErrors();

           for(ObjectError objectError:errors){

              System.out.println(objectError.getCode());

              System.out.println(objectError.getDefaultMessage());

           }

           return"item/editItem";

       }

 

 

注意:添加@Validated表示在对items参数绑定时进行校验,校验信息写入BindingResult中,在要校验的pojo后边添加BingdingResult,一个BindingResult对应一个pojo,且BingdingResult放在pojo的后边。

 

商品修改页面显示错误信息:

页头:

<%@page language="java"contentType="text/html; charset=UTF-8"

   pageEncoding="UTF-8"%>

<%@taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c"%>

<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" 

<%@taglib prefix="spring"uri="http://www.springframework.org/tags"%>

 

在需要显示错误信息地方:

<spring:hasBindErrorsname="item">

<c:forEachitems="${errors.allErrors}"var="error">

    ${error.defaultMessage}<br/>

</c:forEach>

</spring:hasBindErrors>

 

说明:

<spring:hasBindErrorsname="item">表示如果item参数绑定校验错误下边显示错误信息。

 

上边的方法也可以改为:

在controller方法中将error通过model放在request域,在页面上显示错误信息:

 

controller方法:

if(bindingResult.hasErrors()){

           model.addAttribute("errors", bindingResult);

}

 

页面:

<c:forEachitems="${errors.allErrors}"var="error">

    ${error.defaultMessage }<br/>

</c:forEach>

 

 

 

 

1.8  分组校验

如果两处校验使用同一个Items类则可以设定校验分组,通过分组校验可以对每处的校验个性化。

 

需求:商品修改提交只校验商品名称长度

 

定义分组:

分组就是一个标识,这里定义一个接口:

publicinterface ValidGroup1 {

 

}

publicinterface ValidGroup2 {

 

}

 

指定分组校验:

publicclass Items {

    private Integerid;

//这里指定分组ValidGroup1,此@Size校验只适用ValidGroup1校验

    @Size(min=1,max=30,message="{item.name.length.error}",groups={ValidGroup1.class})

    private Stringname;

 

//商品修改提交

    @RequestMapping("/editItemSubmit")

    public String editItemSubmit(@Validated(value={ValidGroup1.class})@ModelAttribute("item") Items items,BindingResultresult,

           @RequestParam("pictureFile") MultipartFile[] pictureFile,Model model)

           throws Exception {

在@Validated中添加value={ValidGroup1.class}表示商品修改使用了ValidGroup1分组校验规则,也可以指定多个分组中间用逗号分隔,

@Validated(value={ValidGroup1.classValidGroup2.class })

 

1.9  校验注解

@Null  被注释的元素必须为 null  

@NotNull   被注释的元素必须不为 null  

@AssertTrue     被注释的元素必须为 true  

@AssertFalse    被注释的元素必须为 false  

@Min(value)     被注释的元素必须是一个数字,其值必须大于等于指定的最小值  

@Max(value)     被注释的元素必须是一个数字,其值必须小于等于指定的最大值  

@DecimalMin(value)  被注释的元素必须是一个数字,其值必须大于等于指定的最小值  

@DecimalMax(value)  被注释的元素必须是一个数字,其值必须小于等于指定的最大值  

@Size(max=, min=)   被注释的元素的大小必须在指定的范围内  

@Digits (integer, fraction)     被注释的元素必须是一个数字,其值必须在可接受的范围内  

@Past  被注释的元素必须是一个过去的日期  

@Future    被注释的元素必须是一个将来的日期  

@Pattern(regex=,flag=)  被注释的元素必须符合指定的正则表达式  

Hibernate Validator 附加的constraint  

@NotBlank(message =)   验证字符串非null,且长度必须大于0  

@Email 被注释的元素必须是电子邮箱地址  

@Length(min=,max=)  被注释的字符串的大小必须在指定的范围内  

@NotEmpty  被注释的字符串的必须非空  

@Range(min=,max=,message=)  被注释的元素必须在合适的范围内

 

2    数据回显

2.1  需求

表单提交失败需要再回到表单页面重新填写,原来提交的数据需要重新在页面上显示。

 

2.2  简单数据类型

对于简单数据类型,如:Integer、String、Float等使用Model将传入的参数再放到request域实现显示。

如下:

   @RequestMapping(value="/editItems",method={RequestMethod.GET})

    public String editItems(Model model,Integer id)throws Exception{

      

       //传入的id重新放到request

       model.addAttribute("id", id);

 

 

2.3 pojo类型

springmvc默认支持pojo数据回显,springmvc自动将形参中的pojo重新放回request域中,request的key为pojo的类名(首字母小写),如下:

 

controller方法:

    @RequestMapping("/editItemSubmit")

    public String editItemSubmit(Integer id,ItemsCustom itemsCustom)throws Exception{

springmvc自动将itemsCustom放回request,相当于调用下边的代码:

model.addAttribute("itemsCustom", itemsCustom);

 

jsp页面:

页面中的从“itemsCustom”中取数据。

 

如果key不是pojo的类名(首字母小写),可以使用@ModelAttribute完成数据回显。

@ModelAttribute作用如下:

1、绑定请求参数到pojo并且暴露为模型数据传到视图页面

此方法可实现数据回显效果。

 

//商品修改提交

    @RequestMapping("/editItemSubmit")

    public String editItemSubmit(Model model,@ModelAttribute("item")ItemsCustomitemsCustom)

   

页面:

<tr>

    <td>商品名称</td>

    <td><inputtype="text"name="name"value="${item.name }"/></td>

</tr>

<tr>

    <td>商品价格</td>

    <td><inputtype="text"name="price"value="${item.price }"/></td>

</tr>

 

如果不用@ModelAttribute也可以使用model.addAttribute("item", itemsCustom)完成数据回显。

 

 

2、将方法返回值暴露为模型数据传到视图页面

 

//商品分类

    @ModelAttribute("itemtypes")

    public Map<String, String> getItemTypes(){

      

       Map<String, String> itemTypes = newHashMap<String,String>();

       itemTypes.put("101", "数码");

       itemTypes.put("102", "母婴");

      

       returnitemTypes;

    }

 

页面:

商品类型:

<selectname="itemtype">

    <c:forEach items="${itemtypes }"var="itemtype">

       <option value="${itemtype.key }">${itemtype.value }</option>      

    </c:forEach>

</select>

 

 

 

3    异常处理器

 

         springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。

        

3.1  异常处理思路

         系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。

         系统的dao、service、controller出现都通过throwsException向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图:



3.2  自定义异常类

       为了区别不同的异常通常根据异常类型自定义异常类,这里我们创建一个自定义系统异常,如果controller、service、dao抛出此类异常说明是系统预期处理的异常信息。

 

         publicclass CustomException extends Exception {

 

    /** serialVersionUID*/

    privatestatic finallong serialVersionUID = -5212079010855161498L;

   

    public CustomException(Stringmessage){

       super(message);

       this.message =message;

    }

 

    //异常信息

    private Stringmessage;

 

    public String getMessage() {

       returnmessage;

    }

 

    publicvoid setMessage(String message) {

       this.message = message;

    }

}

 

 

3.3  自定义异常处理器

 

publicclass CustomExceptionResolver implementsHandlerExceptionResolver {

 

    @Override

    public ModelAndView resolveException(HttpServletRequestrequest,

           HttpServletResponse response, Object handler, Exceptionex) {

 

       ex.printStackTrace();

 

       CustomException customException =null;

      

       //如果抛出的是系统自定义异常则直接转换

       if(exinstanceof CustomException){

           customException = (CustomException)ex;

       }else{

           //如果抛出的不是系统自定义异常则重新构造一个未知错误异常。

           customException = new CustomException("未知错误,请与系统管理员联系!");

       }

      

       ModelAndView modelAndView = new ModelAndView();

       modelAndView.addObject("message", customException.getMessage());

       modelAndView.setViewName("error");

 

       returnmodelAndView;

    }

 

}

 

3.4  错误页面

 

<%@page language="java"contentType="text/html; charset=UTF-8"

   pageEncoding="UTF-8"%>

<%@taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c"%>

<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

<!DOCTYPEhtmlPUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<metahttp-equiv="Content-Type"content="text/html; charset=UTF-8">

<title>错误页面</title>

 

</head>

<body>

您的操作出现错误如下:<br/>

${message }

</body>

 

</html>

 

 

 

3.5  异常处理器配置

在springmvc.xml中添加:

 

<!--异常处理器 -->

    <bean id="handlerExceptionResolver"class="com.hsl.ssm.controller.exceptionResolver.CustomExceptionResolver"/>

 

3.6 异常测试

修改商品信息,id输入错误提示商品信息不存在。

 

修改controller方法“editItem”,调用service查询商品信息,如果商品信息为空则抛出异常:

//调用service查询商品信息

       Items item = itemService.findItemById(id);

      

       if(item ==null){

           thrownew CustomException("商品信息不存在!");

       }

 

 

 

在service中抛出异常方法同上。

 

4    上传图片

4.1  配置虚拟目录

在tomcat上配置图片虚拟目录,在tomcat下conf/server.xml中添加:

<Context docBase="F:\develop\upload\temp"path="/pic" reloadable="false"/>

 

访问http://localhost:8080/pic即可访问F:\develop\upload\temp下的图片。

 

也可以通过eclipse配置:



4.2  配置解析器

<!--文件上传 -->

    <beanid="multipartResolver"

       class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

       <!-- 设置上传文件的最大尺寸为5MB -->

       <property name="maxUploadSize">

           <value>5242880</value>

       </property>

    </bean>

 

4.3  jar包

CommonsMultipartResolver解析器依赖commons-fileupload和commons-io,加入如下jar包:



4.4  图片上传

u  controller:

 

//商品修改提交

    @RequestMapping("/editItemSubmit")

    public String editItemSubmit(Items items, MultipartFilepictureFile)throws Exception{

      

       //原始文件名称

       String pictureFile_name = pictureFile.getOriginalFilename();

       //新文件名称

       String newFileName = UUID.randomUUID().toString()+pictureFile_name.substring(pictureFile_name.lastIndexOf("."));

      

       //上传图片

       File uploadPic = new java.io.File("F:/develop/upload/temp/"+newFileName);

      

       if(!uploadPic.exists()){

           uploadPic.mkdirs();

       }

       //向磁盘写文件

       pictureFile.transferTo(uploadPic);

 

.....

 

 

u  页面:

 

form添加enctype="multipart/form-data":

<formid="itemForm"

       action="${pageContext.request.contextPath}/item/editItemSubmit.action"

       method="post" enctype="multipart/form-data">

       <input type="hidden"name="pic"value="${item.pic }"/>

 

 

file的name与controller形参一致:

           <tr>

              <td>商品图片</td>

              <td><c:iftest="${item.pic !=null}">

                     <img src="/pic/${item.pic}"width=100height=100/>

                     <br />

                  </c:if><input type="file"name="pictureFile"/></td>

           </tr>

 

 

 

 

5    json数据交互

5.1  @RequestBody

作用:

@RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容转换为json、xml等格式的数据并绑定到controller方法的参数上。

 

本例子应用:

@RequestBody注解实现接收http请求的json数据,将json数据转换为java对象

 

5.2  @ResponseBody

作用:

该注解用于将Controller的方法返回的对象,通过HttpMessageConverter接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端

 

本例子应用:

@ResponseBody注解实现将controller方法返回对象转换为json响应给客户端

 

5.3  请求json,响应json实现:

5.3.1 环境准备
Springmvc默认用MappingJacksonHttpMessageConverter对json数据进行转换,需要加入jackson的包,如下:



5.3.2 配置json转换器

在注解适配器中加入messageConverters

 

<!--注解适配器 -->

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">

       <propertyname="messageConverters">

       <list>

       <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>

       </list>

       </property>

    </bean>

 

注意:如果使用<mvc:annotation-driven/> 则不用定义上边的内容。

 

 

5.3.3 controller编写

//商品修改提交json信息,响应json信息

    @RequestMapping("/editItemSubmit_RequestJson")

    public@ResponseBody Items editItemSubmit_RequestJson(@RequestBody Items items)throws Exception {

       System.out.println(items);

       //itemService.saveItem(items);

       return items;

 

    }

 

5.3.4 页面js方法编写:

引入 js:

<script type="text/javascript"

src="${pageContext.request.contextPath}/js/jquery-1.4.4.min.js"></script>

 

 

//请求json响应json

    function request_json(){

       $.ajax({

           type:"post",

           url:"${pageContext.request.contextPath }/item/editItemSubmit_RequestJson.action",

           contentType:"application/json;charset=utf-8",

           data:'{"name":"测试商品","price":99.9}',

           success:function(data){

              alert(data);

           }

       });

    }

 

5.3.5 测试结果:


5.4  请key/value,响应json实现:

表单默认请求application/x-www-form-urlencoded格式的数据即key/value,通常有post和get两种方法,响应json数据是为了方便客户端处理,实现如下:

 

5.4.1 环境准备

同第一个例子

 

5.4.2 controller编写

 

   // 商品修改提交,提交普通form表单数据,响应json

    @RequestMapping("/editItemSubmit_ResponseJson")

    public@ResponseBody Items editItemSubmit_ResponseJson(Items items)throws Exception {

 

       System.out.println(items);

 

//     itemService.saveItem(items);

       return items;

    }

 

5.4.3 页面js方法编写:

 

function formsubmit(){

    var user =" name=测试商品&price=99.9";

    alert(user);

      $.ajax(

       {

           type:'post',//这里改为get也可以正常执行

           url:'${pageContext.request.contextPath}/item/editItemSubmit_RequestJson.action',

//ContentType没指定将默认为:application/x-www-form-urlencoded

           data:user,

           success:function(data){

              alert(data.name);

           }

          

       }  

    )

}

 

从上边的js代码看出,已去掉ContentType的定义,ContentType默认为:application/x-www-form-urlencoded格式。

 

 

5.4.4 测试结果


从上图可以看出请求的数据是标准的key/value格式。

 

 

5.5  小结

实际开发中常用第二种方法,请求key/value数据,响应json结果,方便客户端对结果进行解析。

 

 

6    RESTful支持

6.1  需求

RESTful方式实现商品信息查询,返回json数据

 

6.2  添加DispatcherServlet的rest配置

 

<servlet>

       <servlet-name>springmvc-servlet-rest</servlet-name>

       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

       <init-param>

           <param-name>contextConfigLocation</param-name>

           <param-value>classpath:spring/springmvc.xml</param-value>

       </init-param>

    </servlet>

    <servlet-mapping>

       <servlet-name>springmvc-servlet-rest</servlet-name>

       <url-pattern>/</url-pattern>

    </servlet-mapping>

6.3  URL 模板模式映射

@RequestMapping(value="/viewItems/{id}"):{×××}占位符,请求的URL可以是“/viewItems/1”或“/viewItems/2”,通过在方法中使用@PathVariable获取{×××}中的×××变量。

@PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上。

 

@RequestMapping("/viewItems/{id}")

    public @ResponseBody viewItems(@PathVariable("id") String id,Modelmodel)throws Exception{

       //方法中使用@PathVariable获取useried的值,使用model传回页面

       //调用 service查询商品信息

       ItemsCustom itemsCustom =itemsService.findItemsById(id);

       return itemsCustom;

}

 

如果RequestMapping中表示为"/viewItems/{id}"id和形参名称一致,@PathVariable不用指定名称。

 

 

6.4  静态资源访问<mvc:resources>

如果在DispatcherServlet中设置url-pattern为 /则必须对静态资源进行访问处理。

spring mvc 的<mvc:resourcesmapping="" location="">实现对静态资源进行映射访问。

如下是对js文件访问配置:

<mvc:resources location="/js/"mapping="/js/**"/>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
整理自尚硅谷视频教程springboot高级篇,并增加部分springboot2.x的内容 一、Spring Boot与缓存 一、JSR107 Java Caching定义了5个核心接口,分别是CachingProvider, CacheManager, Cache, Entry 和 Expiry。 • CachingProvider定义了创建、配置、获取、管理和控制多个CacheManager。一个应用可 以在运行 期访问多个CachingProvider。 • CacheManager定义了创建、配置、获取、管理和控制多个唯一命名 的Cache,这些Cache 存在于CacheManager的上下文中。一个CacheManager仅被一个 CachingProvider所拥有。 • Cache是一个类似Map的数据结构并临时存储以Key为索引的值。一个 Cache仅被一个 CacheManager所拥有。 • Entry是一个存储在Cache中的key-value对。 • Expiry 每一 个存储在Cache中的条目有一个定义的有效期。一旦超过这个时间,条目为过期 的状态。一旦过期,条 目将不可访问、更新和删除。缓存有效期可以通过ExpiryPolicy设置。 二、Spring缓存抽象 Spring从3.1开始定义了org.springframework.cache.Cache 和 org.springframework.cache.CacheManager接口来统一不同的缓存技术; 并支持使用JCache(JSR- 107)注解简化我们开发; • Cache接口为缓存的组件规范定义,包含缓存的各种操作集合; • Cache接 口下Spring提供了各种xxxCache的实现;如RedisCache,EhCacheCache , ConcurrentMapCache 等; • 每次调用需要缓存功能的方法时,Spring会检查检查指定参数的指定的目标方法是否 已经被调用 过;如果有就直接从缓存中获取方法调用后的结果,如果没有就调用方法 并缓存结果后返回给用户。下 次调用直接从缓存中获取。 • 使用Spring缓存抽象时我们需要关注以下两点; 1、确定方法需要被缓存 以及他们的缓存策略 2、从缓存中读取之前缓存存储的数据 Cache 缓存接口,定义缓存操作。实现有:RedisCache、EhCacheCache、 ConcurrentMapCache等 CacheManager 缓存管理器,管理各种缓存(Cache)组件 @Cacheable 主要针对方法配置,能够根据方法的请求参数对其结果进行缓存 @CacheEvict 清空缓存 @CachePut 保证方法被调用,又希望结果被缓存。 @EnableCaching 开启基于注解的缓存 keyGenerator 缓存数据时key生成策略 serialize 缓存数据时value序列化策略 @CacheConfig 抽取缓存的公共配置 三、几个重要概念&缓存注解 1、常用注解 2、常用参数 名字 位置 描述 示例 methodName root object 当前被调用的方法名 #root.methodName method root object 当前被调用的方法 #root.method.name target root object 当前被调用的目标对象 #root.target targetClass root object 当前被调用的目标对象类 #root.targetClass args root object 当前被调用的方法的参数列表 #root.args[0] 3、常用参数SPEL说明 名字 位置 描述 示例 caches root object 当前方法调用使用的缓存列表(如 @Cacheable(value= {"cache1","cache2"}) ), 则有两 个cache #root.caches[0].name argument name evaluation context 方法参数的名字. 可以直接 #参数 名 ,也可以使用 #p0或#a0 的形 式,0代表参数的索引; #iban 、 #a0 、 #p0 result evaluation context 方法执行后的返回值(仅当方法执 行之后的判断有效,如‘unless’ , ’cache put’的表达式 ’cache evict’的表达式 beforeInvocation=false ) #result 四、代码中使用缓存 1、搭建基本环境 1、导入数据库文件 创建出department和employee表 2、创建javaBean封装数据 3、整合MyBatis操作数据库 1.配置数据源信息 2.使用注解版的MyBatis; 1)、@MapperScan指定需要扫描的mapper接口所在的包
视频详细讲解,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 1、课程简介 Spring框架是一系列应用框架的核心,也可以说是整合其他应用框架的基座。同时还是SpringBoot的基础。在当下的市场开发环境中,Spring占据的地位是非常高的,基本已经成为了开发者绕不过去的框架了。它里面包含了SpringSpringMVCSpringData(事务),SrpingTest等等。 其中: Spring本身里面包含了两大核心IOC和AOP。IOC负责降低我们代码间的依赖关系,使我们的项目灵活度更高,可复用性更强。AOP是让方法间的各个部分更加独立,达到统一调用执行,使后期维护更加的方便。 SpringMVC本身是对Servlet和JSP的API进行了封装,同时在此基础上进一步加强。它推出的一套注解,可以降低开发人员的学习成本,从而更轻松的做表现层开发。同时,在3.x版本之后,它开始之初Rest风格的请求URL,为开发者提供了开发基于Restful访问规则的项目提供了帮助。 SpringData是一组技术合集。里面包含了JDBC,Data JPA,Data Redis,Data Mongodb,Data Rabbit,Data ElasticSearch等等。合集中的每一项都是针对不同数据存储做的简化封装,使我们在操作不同数据库时,以最简洁的代码完成需求功能。 SpringTest它是针对Junit单元测试的整合。让我们在开发中以及开发后期进行测试时,直接使用Junit结合spring一起测试。 本套课程中,我们将全面剖析SpringSpringMVC两个部分。从应用场景分析,到基本用法的入门案例,再到高级特性的分析及使用,最后是执行原理的源码分析。让学生通过学习本套课程不仅可以知其然,还可以知其所以然。最终通过一个综合案例,实现灵活运用Spring框架中的各个部分。 2、适应人群 学习spring,要有一定的Java基础,同时应用过spring基于xml的配置。(或者学习过官网的Spring课程) 学习springmvc,要有一定java web开发基础。同时对spring框架要有一定了解。 3、课程亮点 系统的学习Spring框架中各个部分,掌握Spring中一些高级特性的使用。 l Spring IoC n 设计模式-工厂模式 n 基础应用-入门案例 n 基础应用-常用注解使用场景介绍及入门 n 高级特性-自定义BeanNameGenerator n 高级特性-自定义TypeFilter n 高级特性-ImportSelector和ImportBeanDefinitionRegistrar的分析 n 高级特性-自定义ImportSelector n 高级特性-FilterType中的AspectJTypeFilter的使用 n 高级特性-自定义ImportBeanDefinitionRegistrar n 高级特性-自定义PropertySourceFactory实现解析yaml配置文件 n 源码分析-BeanFactory类视图和常用工厂说明 n 源码分析-AnnotationConfigApplicationContext的register方法 n 源码分析-AnnotationConfigApplicationContext的scan方法 n 源码分析-AbstractApplicationContext的refresh方法 n 源码分析-AbstractBeanFactory的doGetBean方法 l Spring Aop n 设计模式-代理模式 n 编程思想-AOP思想 n 基础应用-入门案例 n 基础应用-常用注解 n 高级应用-DeclareParents注解 n 高级应用-EnableLoadTimeWeaving n 源码分析-@EnableAspectJAutoproxy注解加载过程分析 n 源码分析-AnnotationAwareAspectJAutoProxyCreator n 技术详解-切入点表达式详解 l Spring JDBC n 基础应用-JdbcTemplate的使用 n 源码分析-自定义JdbcTemplate n 设计模式-RowMapper的策略模式 n 高级应用-NamedParameterJdbcTemplate的使用 n 源码分析-TransactionTemplate n 源码分析-DataSourceUtils n 源码分析-TransactionSynchronizationManager
VBA 开发人员手册,作者:解祥成。 目 录 第 1 章、VBA入门.......................................... 3 1 、了解嵌入和全局VBA工程 2、用VBA管理器组织工程 3、处理宏 4、用VBA IDE编辑工程 5、更多的信息 6、回顾AutoCAD VBA 工程术语 7、回顾AutoCAD VBA 命令 第 2 章、理解ActiveX自动操作基础 1、理解AutoCAD对象模型 2、访问对象层次 3、通过集合对象操作 4、理解属性和方法 5、理解父对象 6、定位类型库 7、在数据库中返回第一个图元 8、在方法和属性中使用变体 9、使用其它程序语言 第三章 控制AutoCAD环境 1、打开、保存和关闭图形 2、设定AutoCAD参数 5、重置活动对象 6、设定和返回系统变量 7、精确制图 8、提示用户输入 9、访问AutoCAD命令行 第四章 创建和编辑AutoCAD图元 1、创建对象 2、编辑对象 3、使用图层、颜色和线型 4、添加文本到图形中 第五章 标注与公差 1、标注的概念 2、创建标注 3、编辑标注 4、利用标注样式 5、在模型空间和图纸空间中标注 6、创建引线及注解 7、创建形位公差 第六章 定义菜单和工具栏 1、理解MenuBar和MenuGroups集合 2、加载菜单组 3、改变菜单条 4、创建和编辑下拉菜单和快捷菜单 5、建立并编辑工具栏 7、对菜单项和工具栏项增加状态栏帮助 8、在右键菜单中增加条目 第七章 使用事件 1、了解AutoCAD中的事件 2、编写事件处理器的方法 3、处理应用程序级事件 4、处理文档级事件 5、处理对象级事件 第八章 在三维空间下工作 1、指定三维坐标 2、定义用户坐标系统 3、坐标转换 4、建立三维对象 5、在三维中编辑 6、编辑三维实体 第九章 定义布局及打印 1、了解模型空间和图纸空间 2、了解视口 3、打印图纸 第十章-高级绘图与组织技术 1、使用光栅图像 2、使用块和属性

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火柴有猿

您的鼓励,将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值