美文网首页Spring-BootSpring Boot我爱编程
Spring Boot总结(1)---了解Spring Boo

Spring Boot总结(1)---了解Spring Boo

作者: 18587a1108f1 | 来源:发表于2017-08-14 10:29 被阅读531次

前言:最近项目使用的是Spring Boot框架,开个贴,记录和总结Spring Boot的一些技术内容。

Spring Boot简介

Spring Boot是由Pivotal团队提供的框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

多年以来,Spring IO平台饱受非议的一点就是大量的XML配置以及复杂的依赖管理。Boot实现了免XML配置的开发体验,开发人员不仅不再需要编写XML,而且在一些场景中甚至不需要编写繁琐的import语句。在对外公开的beta版本刚刚发布之时,Boot描述了如何使用该框架在140个字符内实现可运行的web应用,从而获得了极大的关注度,该样例发表在tweet上。

Spring概述

Spring Boot虽然提高了开发效率,但其本身完全是一个单纯基于Spring的应用。如Spring Boot的自动配置是通过Spring 4.x的@Conditional注解来实现的。因而先概述下Spring和Spring MVC的基础概念(后期会详细整理Srping + Spring MVC + Hibernate的相关技术整理)。

Spring 框架原则:

  1. 使用 POJO 进行轻量级和最小侵入式开发。

  2. 通过 依赖注入基于接口 实现松耦合。

  3. 通过 AOP和默认习惯 进行声明式编程。

  4. 使用 AOP和模板(template) 减少模式化代码。

    部分概念说明:

    POJO(Plain Old Java Project,无限制java普通对象):通常指项目中的实体类对象,一般具有一部分getter/setter方法。它不包含业务逻辑,不是JavaBean、EntityBean等,不具有任何特殊角色和不继承或不实现任何其它Java框架的类或接口。

    最小侵入式开发:Spring减少了框架API必须臃肿继承实现的恶习。最小侵入式概念的一篇很好的例子

    AOP:面向切面编程,相对于OOP(面向对象编程)。通过切面注解(@Aspect、@Component)可设置切点并对调用或请求进行拦截。

    AOP原理: spring用代理类包裹切面,把他们放入Spring管理的bean中。它会截取对目标类中方法的调用,让调用者对目标类的调用都先变成调用伪装类,伪装类中就先执行了切面,再把调用转发给真正的目标bean。 一篇AOP讲的很生动的详解

Spring 配置发展

  1. xml配置:通过xml配置所有bean
  2. 注解配置:通过@Component等注解来配置业务相关配置,用xml配置应用的基本配置(如数据库)
  3. java配置:从Spring3.x到现在,提供java配置(其中使用注解@Configuration和@Bean),Spring boot推荐这种配置来进行全局配置(如数据库相关配置)。

Spring MVC概述

MVC与三层架构

MVC:Model(数据模型) + View(视图) + Controller(控制器)

三次架构:表现层(User Interface layer) + 业务逻辑层(Business Logic Layer) + 数据访问层(Data access layer)

区别:三层是基于业务逻辑来分的,而mvc是基于页面来分的。Model、View、Controller位于三层结构中的表现层。

Spring MVC搭建Web应用

Spring MVC提供一个DIspatcherServlet开发Web应用。在Servlet2.5及以下在web.xml中配置<servlet>元素;在Servlet3.0以上可使用无web.xml方式,在Spring MVC里实现WebApplicationInitializer接口便可实现等同于web.xml。

Spring MVC常用注解

几个常用注解用法可以自查,这里不再详细赘述。

@Controller

@RequestMapping

配置了jackjson依赖后,可以直接转换实体类和json、xml

示例: @RequestMapping(produces={"application/json;charset=UTF-8"})

@ResponseBody

@RequestBody

@RestController

静态资源与拦截器

静态资源:如果我们在src/main/resources下建立了静态资源目录需要直接访问,可以通过在配置文件中声明ResourceHandlerRegistry 并通过其方法addResourceHandler来进行配置引用。

@Configuration
public class ResourceConfigure extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/assets/**")
                .addResourceLocations("classpath:/templates/assets/");
    }
}

拦截器:可以继承实现Filter或HandlerInterceptorAdapter来实现自定义拦截器,Filter通过重写doFilter方法来处理拦截;HandlerInterceptorAdapter通过重写preHandle和postHandle方法来处理拦截。Filter通过在启动类下声明Bean来进行拦截。HandlerInterceptorAdapter在配置文件中声明InterceptorRegistry并通过其方法addInterceptor来注册拦截器。下面给出Filter例子:

public class HttpAuthorFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest=(HttpServletRequest) servletRequest;
        HttpServletResponse httpServletResponse= (HttpServletResponse) servletResponse;
        String url=httpServletRequest.getRequestURI();
        if(url.equals("/")||url.contains("."))
        {
            filterChain.doFilter(servletRequest,servletResponse);
        }
        else{
            try {
                filterChain.doFilter(servletRequest,servletResponse);
            } catch (UserErrorException e) {
                httpServletResponse.sendRedirect("/error");
            }
        }
    }
@Bean
public FilterRegistrationBean httpAuthorFilter(){
        FilterRegistrationBean registration = new FilterRegistrationBean(new HttpAuthorFilter());
        registration.addUrlPatterns("/*");
        return registration;
    }

Spring Boot

接下来,简单了了解了Spring和Spring MVC的简单概念和常用注解等之后,从下篇起,开始详细总结Spring Boot。

相关文章

网友评论

    本文标题: Spring Boot总结(1)---了解Spring Boo

    本文链接:https://www.haomeiwen.com/subject/fuoyrxtx.html