Spring(六): Spring Aware 通过 Bean 获取容器的服务

  项目中,当需要用到Spring容器本身的功能资源时,Bean就需要知道容器的存在,才能调用 Spring 所提供的资源,而 Spring Aware就是提供这样的功能,原本也是给 Spring 框架内部使用的。

  Spring Aware 的目的就是为了让 Bean 获取容器的服务。ApplicationContext接口集成了MessageSource接口,ApplicationEventPublisher接口和ResourceLoader接口,如果让 Bean 继承 ApplicationContextAware可以获得 Spring 容器的所有服务,但原则上有用到什么接口,再实现该接口。   

阅读更多

Spring Boot 2系列(附一):application properties自动配置属性官方汇总与XML配置引入

Spring Boot项目常用配置汇总,如引入XML配置等。

使用XML配置:Spring Boot提倡零配置,即无XML配置,但一些特殊要求需要使用XML配置。
在配置类或入口类上添加如下注解。
@ImportResource(value = {"classpath:some-context.xml","classpath:another-context.xml"})

阅读更多

Spring MVC 之 文件上传

  文件上传可以说是项目中最常用的功能。

  Spring MVC 为文件上传提供了直接的支持,Spring MVC 提供了一个文件上传的解析类CommonsMultipartResolver,即插即用(在XML文件装配下),该类依赖了Apache Commons FileUpload技术,所以需要导入commons-fileupload.jarcommons-io.jar两个包。

  上传文件,必须将表单的method设置为post,并将enctype设置为multipart/form-data,浏览器才会把文件二进制数据发给服务器。

阅读更多

Spring MVC之HandlerInterceptor拦截器

  拦截器是 Web 项目很重要和常用的功能,如对用户权限验证,判断用户是否已登录等。

  SpringMVC 中的拦截器通过实现HanderInterceptor接口来完成,或继承抽象类HandlerInterceptorAdapter,重写里面的方法来完成。

阅读更多

Spring MVC使用MockMvc和Junit进行单元测试

  声明一点:对于软件质量的保证,单元测试真的非常有必要,在CMMI-5标准也是对单元测试有明确要求的。

  有的公司的对开发要求严谨的话,开发流程可能执行的是测试驱动开发(TDD),即根据拿到需求,开发人员先写预期单元测试用例,再根据满足测试用例的要求来开发业务代码。

  在不启动项目的情况下,对Spring Web项目,需要一些Servlet相关的模拟对象,比如:MockMvc,MockHttpSession,MockHttpServletRequest,MockHttpServletResponse等,还需要WebAppConfiguration

阅读更多

Spring MVC使用MockMvc和Junit进行单元测试

  声明一点:对于软件质量的保证,单元测试真的非常有必要,在CMMI-5标准也是对单元测试有明确要求的。

  有的公司的对开发要求严谨的话,开发流程可能执行的是测试驱动开发(TDD),即根据拿到需求,开发人员先写预期单元测试用例,再根据满足测试用例的要求来开发业务代码。

  在不启动项目的情况下,对Spring Web项目,需要一些Servlet相关的模拟对象,比如:MockMvc,MockHttpSession,MockHttpServletRequest,MockHttpServletResponse等,还需要WebAppConfiguration

阅读更多

Spring MVC报错:java.lang.NullPointerException at org.apache.jsp.WEB_002dINF.jsp.index_jsp._jspInit(index_jsp.java:31)

  报错:访问Maven管理的SpringMVC 项目jsp页面,错误:at org.apache.jsp.WEB_002dINF.jsp.index_jsp._jspInit(index_jsp.java:31)

  原因:是项目的servlet-apijsp-api两个jar包与Tomcat自带的包冲突导致。

  解决:在pom.xml文件,将这两个jar包添加<scope>provided</scope>控制,只在编译和测试有效。

阅读更多