java技术---Spring Boot原理浅析

1.SpringBoot是Spring框架对“约定大于配置(Convention over Configuration)”理念的最佳实践
2.SpringBoot应用本质上就是一个基于Spring框架的应用
3.快速创建生成一个基于 Maven的Spring Boot项目
(1)打开网址:start.spring.io,填写对应信息,如图所示
在这里插入图片描述
(2)解压后的项目文件在myeclipse中打开以后,我们会看到如下的项目结构
在这里插入图片描述
(3)生成好的项目中的SpringbootDemoApplication.java文件,内容如下
在这里插入图片描述
(4)最耀眼的就是@SpringBootApplication注解以及在main方法中运行的SpringAppliation.run()了,那我们要揭开SpringBoot应用的奥秘,很明显就要拿这二位开刀了

 <1>@SpringBootApplication注解
     (1)@SpringBootApplication其实是一个复合的注解
     (2)主要作用的就是@SpringBootConfiguration、@EnableAutoConfiguration以及@ComponentScan 三个注解组成
     (3)即 @SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan
     (4)如果我们把SpringBoot启动类改写成如下方式,整个SpringBoot应用依然可以与之前的启动类功能一样

在这里插入图片描述

 <2>SpringAppliation.run()
    (1)run方法干了两件事:
        1.创建SpringApplication对象:在对象初始化时保存事件监听器,容器初始化类以及判断是否为web应用,保存包含main方法的主配置类。
        2.用创建好的SpringApplication对象调用run方法:准备spring的上下文,完成容器的初始化,创建,加载等。会在不同的时机触发监听器的不同事件

4 springboot自动装配原理

(1)springboot解决了spring以及springmvc繁琐的配置的痛点,以“约定大于配置”为原则,实现了自动装配    
(2)把bean放入到Spring的Ioc容器叫做装配
(3)在装配Bean的时候,首先要知道哪些类需要被装配,实现这一方式的途径总体上说分为两种 :传统的xml方式,另一种则是注解方式
(4)SpringBoot利用Spring 模式注解装配、Spring @Enable 模块装配、Spring 条件装配装配及Spring 工厂加载机制来实现其自动装配的原理

5.springboot 是如何帮我们省去web.xml配置的

 (1)web.xml就是非常重要的一个配置,无论是servlet、filter、listener都需要在web.xml里面配置下
 (2)在servlet3.0里,这个配置得到了简化。可以通过java配置(注解等)省去web.xml配置。
 (3)一个非常重要的类:javax.servlet.ServletContainerInitializer,初始化servlet代替了web.xml
       <1>这个类会在web容器启动阶段被回调,可以在onStartup方法里做一些servlet、filter、listener的注册等操作
       <2>SpringBoot会默认注册几个servlet、filter、listener
 (4)实现自定义的Filter (2种方式)    
       方式一:
        <1>在Filter实现类加入@WebFilter注解
        <2>然后在SpringBootApplication类上添加@ServletComponentScan
      方式二:
      <1>添加component注解   
  (5)Servlet和Listener
       <1>Servlet与Listener的支持与Filter大同小异
       <2>分别是通过@WebServlet、@WebListener进行注解    
  (6)实现自定义拦截器
      <1>编写拦截器实现类,此类必须实现接口HandlerInterceptor 
      public class OneInterceptor implements HandlerInterceptor{
/**
 * 在请求处理之前进行调用(Controller方法调用之前)
 */
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object object) throws Exception {
}
/**
 * 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
 */
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
/**
 * 在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)
 */
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
public void returnErrorResponse(HttpServletResponse response, LeeJSONResult result) throws IOException, UnsupportedEncodingException {
}
       <2>编写拦截器配置文件主类 WebMvcConfigurer  此类必须继承  WebMvcConfigurerAdapter 类
       <3>重写其中的方法  addInterceptors
       <4>在主类上加上注解  @Configuration
     @Configuration
     public class WebMvcConfigurer extends WebMvcConfigurerAdapter{
/**
 * Description:重写增加自定义拦截器的注册,某一个拦截器需要先注册进来,才能工作
 */
@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new OneInterceptor()).addPathPatterns("/one/**");
    registry.addInterceptor(new TwoInterceptor()).addPathPatterns("/one/**")
                                                 .addPathPatterns("/two/**");
    super.addInterceptors(registry);
}
}

总结:综上是对自动配置原理
(1)一定要记得XxxxProperties类的含义是:封装配置文件中相关属性
(2)XxxxAutoConfiguration类的含义是:自动配置类,目的是给容器中添加组件。
(3)其他的主方法启动,则是为了加载这些五花八门的XxxxAutoConfiguration类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值