spring boot 知识点整理

作者: java面试笔试 | 来源:发表于2018-08-15 12:35 被阅读1次

    最近新的项目架构启用spring boot cloud,SO现在先坐下简单的技术梳理,后边的博客会把spring的技术细节,boot的技术细节重新梳理一遍

    1、下面是根据条件初始化bean

    2、读取配置信息操作

    加载配置可以用@PropertySource("classpath:com/ecej/test2/test.properties") 记得要用 private Environment environment; 读取配置

    packagecom.ecej.test2;

    importorg.apache.commons.io.IOUtils;

    importorg.springframework.beans.factory.annotation.Autowired;

    importorg.springframework.beans.factory.annotation.Value;

    importorg.springframework.context.annotation.Bean;

    importorg.springframework.context.annotation.ComponentScan;

    importorg.springframework.context.annotation.Configuration;

    importorg.springframework.context.annotation.PropertySource;

    importorg.springframework.context.support.PropertySourcesPlaceholderConfigurer;

    importorg.springframework.core.env.Environment;

    importorg.springframework.core.io.Resource;

    @Configuration

    @ComponentScan("com.ecej.test2")

    @PropertySource("classpath:com/ecej/test2/test.properties")

    publicclassELConfig{

    @Value("I LOVE YOU")

    privateString normal;

    @Value("#{systemProperties['os.name']}")

    privateString osName;

    @Value("#{T(java.lang.Math).random() * 100.0}")

    privatedoublerandomNumber;

    @Value("#{demoService.another}")

    privateString fromAnother;

    @Value("#classpath:com/ecej/test2/test.properties")

    privateResource testFile;

    @Value("http://www.baidu.com")

    privateResource testUrl;

    @Value("${book.name}")

    privateString bookName;

    @Autowired

    privateEnvironment environment;

    @Bean

    publicstaticPropertySourcesPlaceholderConfigurerpropertyConfigure(){

    returnnewPropertySourcesPlaceholderConfigurer();

    }

    publicvoidoutputResource(){

    try{

    System.out.println(normal);

    System.out.println(osName);

    System.out.println(randomNumber);

    System.out.println(fromAnother);

    System.out.println(IOUtils.toString(testUrl.getInputStream()));

    System.out.println(bookName);

    System.out.println(environment.getProperty("book.author"));

    }catch(Exception e) {

    //TODO:handle exception

    }

    }

    }

    3、spring event

    事件

    1 、首先我们要实现ApplicationListener 实现我们自己的监听

    2、 定义我们自己的事件 通过集成ApplicationEvent实现

    3、 定义config启动

    通过applicationContext 发布事件

    @Component

    publicclassDemoPublisher{

    @Autowired

    privateApplicationContext applicationContext;

    publicvoidpublish(String msg){

    applicationContext.publishEvent(newDemoEvent(this, msg));

    }

    }

    4、spring Aware

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

    5、多线程

    spring通过 TaskExecutor来实现多线程并发编程。使用ThreadPoolExecutor可实现基于线程池的TaskExecutor,使用@EnableAsync开启对异步任务的支持,并通过在实际执行bean方法中使用@Async注解来声明一个异步任务

    6、计划任务

    通过配置注解@EnableScheduline来开启对计划任务的支持,然后再要执行的任务上加注解@Scheduled

    spring通过@Scheduled支持多种类型计划任务,包含cron,fixDelay、fixRate(固定时间执行)

    7、条件注解@Conditional

    8、组合注解与源注解

    源注解:就是可以注解到别的注解上的注解,被注解的注解称之为组合注解。组合注解有源注解的功能。

    @Configuration  @ComponentScan 组合出 Wiselyconfiguration

    9、@Enable*注解工作原理

    10、Spring MVC

    下面所讲解的都是配置在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集合

    正式开始spring boot

    CLI  命令行控制工具

    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

    @Bean

    publicInternalResourceViewResolverviewResolver(){

    InternalResourceViewResolver resolver =newInternalResourceViewResolver();

    resolver.setPrefix("WEB-INF/classes/views/");

    resolver.setSuffix(".jsp");

    resolver.setViewClass(JstlView.class);

    returnresolver;

    }

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

    3、静态首页的支持

    4、接管spring boot 的web配置

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

    注解来实现自己完全控制

    @Configuration

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

    @EnableWebMvc

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

    5、注册servlet Filter Listener(重点来了)

    可以注册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等

    7、SSL配置(安全套接层)

    生成证书:

    JDK下有工具keytool ,他是一个证书管理工具,可以用来生成证书

    在你命令执行的当前目录下生成了一个.keystore的证书

    配置我们的配置文件

    server.port=8000

    server.ssl.key-store=.keystore

    server.ssl.key-store-password=123456

    server.ssl.keyStoreType=JKS

    server.ssl.keyAlias:tomcat

    此时在启动项目就变成了https的

    8、设置自己的Favicon

    这个就非常简单了,只需要将自己的favicon.ico文件放在META-INF/resources/   resources/  static/  public/下面任意一个目录下就行了。

    9、WebSocket

    这到底是个什么鬼呢?

    官方说法,就是为浏览器和服务端提供双工异步通信的功能。直接使用WebSocket会使开发非常繁琐的,所以我们使用它的子协议STOMP,它是一个更高级的协议,STOMP协议使用一个基于帧的格式来定义消息,与HTTP的request response类似。

    spring boot内置了这玩意,可以看websocket包下的类

    需要加入

    spring-boot-starter-websocket 包

    @EnableWebSocketMessageBroker注解并继承AbstractWebSocketMessageBrokerConfigurer

    模式:

    广播式  会将消息发送给所有连接了当前的浏览器

    代码片段

    packagecom.ecej.demo2.websocket;

    importorg.springframework.context.annotation.ComponentScan;

    importorg.springframework.context.annotation.Configuration;

    importorg.springframework.messaging.simp.config.MessageBrokerRegistry;

    importorg.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;

    importorg.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;

    importorg.springframework.web.socket.config.annotation.StompEndpointRegistry;

    @Configuration

    @ComponentScan(value ="com.ecej.demo2.websocket")

    @EnableWebSocketMessageBroker

    publicclassWebSocketConfigextendsAbstractWebSocketMessageBrokerConfigurer{

    @Override

    publicvoidregisterStompEndpoints(StompEndpointRegistry register){

    register.addEndpoint("/endpointWisely").withSockJS();

    }

    @Override

    publicvoidconfigureMessageBroker(MessageBrokerRegistry register){

    register.enableSimpleBroker("/topic");

    }

    }

    解析:

    1、通过@EnableWebSocketMessageBroker 注解开启使用STOMP协议传输基于代理(message broker)的消息,

    这时控制器支持使用@MessageMapping,就像使用@RequestMapping一样

    2、注册STOMP协议的节点,并映射的指定的URL

    3、注册一个STOMP的endpoint,并指定使用SocketJS协议

    4、配置消息代理(message broker)

    5、广播式应配置一个/topic消息代理

    10、spring 的事物机制

    spring事物机制提供了一个PlatformTransactionManager接口,不同的数据访问技术的事物使用不同的接口实现

    声明式事物

    使用@Transactional注解在方法上表明该方法需要事物支持,基于AOP实现操作。

    使用@EnableTransactionManagement来开启上边的注解

    类级别的注解@Transactional会重载方法级别的

    11、缓存支持

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

    12、异步消息

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

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

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


    原文:https://blog.csdn.net/luqiang81191293/article/details/54629873

    公众号:javafirst

    相关文章

      网友评论

        本文标题:spring boot 知识点整理

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