spring boot 知识点整理

在一个@Configuration注解的类里面,用@Bean去注解需要实例化的类,@Configuration和@Bean是spring 3.0之后开始支持的一组新注解,实现自动装配,从而可以支持完全无XML配置。如下形式:

1、下面是根据条件装配bean


2、如何自定义starter

@Configuration一般被用来初始化配置,有两种方法可以使带有@Configuration的类被初始化,一为让把类所在包的路径纳入scanBasePackages,这样就进入了Spring的扫描范围;还有一种方法就是在spring.factories中用org.springframework.boot.autoconfigure.EnableAutoConfiguration=类的全路径名,这样在项目启动的时候SpringFactoriesLoader会初始化spring.factories(包括引入的jar包中的)中配置的类。在spring.factories配置的好处就是,如果我们想开发一个jar把供其他人使用,那么我们就在自己工程的spring.factories中配置@@Configuration类,这样只要其他人在他们项目的POM中加入了我们开发的jar包作为依赖,在他们项目启动的时候就会初始化我们开发的工程中的类。初识Spring Boot框架(二)之DIY一个Spring Boot的自动配置
 

3、如何自定义初始化

实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求。 有5种方式可以实现这个需求

为了解决这样的问题,Spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来实现。很简单,只需要一个类就可以,无需其他配置。 创建实现接口 CommandLineRunner 的类,根据控制台结果可判断,@Order 注解的执行优先级是按value值从小到大顺序

自定义初始化过程


4、spring Aware

讲解:bean 和spring是无耦合的,但是如果想用到spring容器的功能资源,就要你的bean知道spring的存在,这就是spring aware


5、条件注解@Conditional


6、@Enable*注解工作原理


10、Spring MVC

@requestBody 用于方法参数中接受前端传递过来的json数据,不返回view

@responseBody 用于返回前端json数据

@requestParam HTTP请求的参数

@requestHeader 对于HTTP请求头的参数

@pathVariable 路径请求参数

@ModelAttribute 通常作用在control的某个方法上,此方法会首先被调用,并将方法的而结果作为model的属性,然后再调用对应的control处理方法,常用于baseAction类中接受httpserverrequest等

springMVC4中获取request和response对象有以下两种简单易用的方法:

1、在control层获取

 1)通过方法参数直接在action类中获取

   public String getReqAndRes(HttpServletRequest request, HttpServletResponse response){

      /**  相关业务代码   此时可以直接使用request response对象 */

   }

2)利用spring web提供的@ModelAttribute注解

2、通过spring提供的RequestContextHolder在非contrller层获取request和response对象

HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();

HttpServletResponse response = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getResponse();

下面所讲解的都是配置在MyMVCConfig

通过实现WebApplicationInitializer 等同于web.xml配置

基本配置

spring MVC的定制配置需要我们配置集成一个WebMvcConfigurerAdapter,并在此使用@EnableWebMvc注解,来开启对spring MVC配置支持

静态资源

重写addResourceHandlers方法实现

拦截器配置

类似servlet的Filter

可以让普通bean 实现HanlderIntercepetor接口或者继承HandlerInterceptorAdapter类来实现自定义拦截器

在boot中通过重写WebMvcConfigurerAdapter 的 addInterceptors方法来注册自定义拦截器

@ControllerAdvice

@ExceptionHandler定义全局处理 ,通过value属性可以设置拦截过滤条件

在开发中经常会遇到跳转页面的事情,我们还要单独写一个方法很麻烦,现在可以这样

路径参数配置

在spring mvc中路径参数如果带点“.” ,那点后面的值将被忽略。通过重写configurePathMatch(PathMatchConfigurer) 可不忽略 点后参数

文件上传

demo集合

1、@SpringBootApplication 和入口

这个标签是个组合注解,包含了@Configuration @EnableAutoConfiguration @ComponentScan三个标签

@EnableAutoConfiguration 让spring boot根据类路径中的jar包依赖为当前项目进行自动配置

在spring boot中我们可以使用

@Value("${book.author}")直接注入属性,但是还是感觉一个个注入麻烦啊,SO,我们可以直接映射一个类,用@ConfigurationProperties(prefix="author",locations={"classpath:author.properties"})通过prefix指定前缀,通过locations指定位置


2、spring boot 的web开发

需要定义模版信息的话,使用ViewResolver  ,别忘了在config上加注解@EnableWebMvc

[java] view plain copy

  1. @Bean  
  2.   
  3. public InternalResourceViewResolver viewResolver() {  
  4.   
  5. InternalResourceViewResolver resolver = new InternalResourceViewResolver();  
  6.   
  7. resolver.setPrefix("WEB-INF/classes/views/");  
  8.   
  9. resolver.setSuffix(".jsp");  
  10.   
  11. resolver.setViewClass(JstlView.class);  
  12.   
  13. return resolver;  
  14.   
  15. }  

静态资源默认放在src/main.resources/static 下面


3、静态首页的支持


4、接管spring boot 的web配置

如果boot 提供的配置不是我们需要的,可以通过配置类修改,

注解来实现自己完全控制

@Configuration

@ComponentScan("com.ecej.test.mvc")

@EnableWebMvc

如果我们想即用默认配置,又增加自定义配置,可以集成WebMvcConfigurerAdapter,无需使用@EnableWebMvc注解


5、注册servlet Filter Listener  @servletComponentScan作用

在springbootApplication上注册@servletComponentScan注解后,@webLister注解自动注册,无需其他代码

或者可以注册ServletRegistrationBean  FilterRegistrationBean  ServletListenerRegistrationBean 的bean来实现


6、Tomcat配置

其实就是servlet容器配置,因为BOOT内置的是tomcat,所以也就叫tomcat配置了

配置都在org.springframework.boot.autoconfigure.web.ServerProperties 中(其实大部分都有这么个配置)

SO,我们只需要在application.properties中配置就好了(如果你想拥别的名字,只需要配置下就行咯,在上边有提到过)。通用的配置都以server作为前缀

例子:

配置容器

server.port=8080

server.session-timeout=2

配置tomcat

server.tomcat.uri-encoding=UTF-8

上边都是配置文件配置,如果想玩玩代码也是可以的,下面介绍代码配置

想配置servlet容器可以实现一个EmbeddedServletContainerCustomizer的接口(注意声明的类要为static)

想直接配置tomcat等则可以直接定义TomcatEmbeddedServletContainerFactory等

11、缓存支持

不同的缓存技术,需要不同的cacheManager


12、异步消息

spring 对JMS和AMQP的支持分别来自于spring-jms 和spring-rabbit

他们分布需要ConnectionFactory来实现连接消息代理,并分别提供了JmsTemplate、RabbitTemplate

spring为JMS 、AMQP提供了@JmsListener @RabbitListener 注解在方法上监听消息代理发布的消息。我们只需要分别通过@EnableJms @EnableRabbit开启支持

猜你喜欢

转载自blog.csdn.net/zhousenshan/article/details/79827842