1. Spring boot 简介

1.1 spring boot的三大特性

  • 组件自动装配:Web mvc, Web Flux,JDBC等

激活:@EnableAutoConfiguration

配置:/META-INF/spring.factories

实现:XXXAutoConfiguration

  • 嵌入式web容器:Tomcat、Jetty以及underTow
  • 生产准备特性

2.2. 传统Servlet

  • Servlet组件:Servlet、Filter、Listener
  • Servlet注册:Servlet注解、Spring Bean 、Registration Bean
  • 异步非阻塞:异步Servlet(Servlet3.0)、非阻塞Servlet(Servlet3.1)

2. 自动装配

  spring模式注解装配:

  • 定义:声明在应用中扮演“组件”角色的注解
  • 举例:@Component  , @Service , @Configuration
  • 装配:<context:component:scan  />  或者 @ComponentScan()

2.1 Spring framework 手动装配自定义注解

  自定义模式注解:注解的‘’派生性、层次性‘’。

/**
* Component -> Repository -> FirstLevelRepository (每个注解中都要定义value属性)
*/ @Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repository
public @interface FirstLevelRepository { String value() default "";
}

  使用自定义注解:

@FirstLevelRepository(value = "myRepository")
public class MyRepository {
public void show(){
System.out.println("my repository...");
}
}

  启动测试:

@ComponentScan(basePackages = {"com.vstudy.web.repository"})
public class FirstLevelBootstrap { public static void main(String[] args) {
ConfigurableApplicationContext context = new SpringApplicationBuilder(FirstLevelBootstrap.class)
.web(WebApplicationType.NONE)
.run(args);
MyRepository myRepository = (MyRepository) context.getBean("myRepository");
myRepository.show();
context.close();
}
}

2.2 @Enable装配,自动装配相同领域的功能组件集合- - 基于模块注解

  定义:预备相同领域的功能组件集合,组合形成一个独立的单元

  举例:@EnableWebMvc    @EnableAutoConfiguration等。

  实现:注解方式、变成方式

  

  Enable自动装配

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
//@Import(HelloWorldConfiguration.class)
@Import(HelloWorldImportSelector.class) // 装入Bean到容器中
public @interface EnableHelloWorld {
}

  将Bean放入容器的配置

@Configuration
public class HelloWorldConfiguration { @Bean
public String helloWorld() { // 方法名即 Bean 名称
return "Hello,World 2018";
} }

  启动测试:

@EnableHelloWorld
public class EnableHelloWorldBootstrap { public static void main(String[] args) {
ConfigurableApplicationContext context = new SpringApplicationBuilder(EnableHelloWorldBootstrap.class)
.web(WebApplicationType.NONE)
.run(args); // helloWorld Bean 是否存在
String helloWorld =
context.getBean("helloWorld", String.class);
System.out.println("helloWorld Bean : " + helloWorld);
// 关闭上下文
context.close();
}
}

EnableHelloWorldBootstrap.java

2.3 条件装配

  定义:在装配bean的前置判断

  举例:@Profile   @Condition

  实现:注解方式、编程方式

 注解方式:

@Profile("java7")   @Profile("java8")

public interface SumService {

    /**
* 计算多个整的的和
* @param values 多个整数
* @return
*/
Integer sum(Integer ... values);
}

SumService.java

  java7的实现:

@Profile("java7")  // 当jdk环境为java7时,Service注解生效
@Service
public class Java7SumServiceImpl implements SumService {
@Override
public Integer sum(Integer... values) {
System.out.println("java 7的方式实现求和");
Integer sum = 0;
for (int i = 0; i < values.length; i++) {
sum += values[i];
}
return sum;
}
}

Java7SumServiceImpl .java

  java8的实现:

/**
* Java 7 for循环实现 {@link SumService}
*/ @Profile("java8") // 当jdk环境为java7时,Service注解生效
@Service
public class Java8SumServiceImpl implements SumService {
@Override
public Integer sum(Integer... values) {
System.out.println("java 8 的方式实现求和");
Integer sum = Stream.of(values).reduce(0, Integer::sum); return sum;
}
}

Java8SumServiceImpl

  测试:

@SpringBootApplication(scanBasePackages = "com.vstudy.web.service")
public class SumServiceBootstrap { public static void main(String[] args) {
ConfigurableApplicationContext context = new SpringApplicationBuilder(SumServiceBootstrap.class)
.web(WebApplicationType.NONE)
.profiles("java8") //这里的profile参数和设定的环境对应
.run(args); // CalculateService Bean 是否存在
SumService calculateService = context.getBean(SumService.class); System.out.println("calculateService.sum(1...10) : " +
calculateService.sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)); // 关闭上下文
context.close();
}
}

SumServiceBootstrap

2.4 Spring Boot自动装配

  定义: 基于约定大于配置的原则,实现Spring组件自动装配目的

  装配:模式装配、@Enable模块、条件装配、工厂加载机制

  实现:

  • 激活自动装配:@EnableAutoConfiguration
  • 实现自动装配:XxxAutoConfiguration
  • 配置自动装配实现:META-INF/spring.factories

@EnableAutoConfiguration -> spring.factories -> EnableAutoConfiguration -> HelloWorldAutoConfiguration ->

@EnableHelloWord -> HelloWorldConfiguration ->Hello World

1) 激活自动装配

//激活自动装配
@EnableAutoConfiguration
public class EnableAutoConfigBootstrap { public static void main(String[] args) {
ConfigurableApplicationContext context = new SpringApplicationBuilder(EnableAutoConfigBootstrap.class)
.web(WebApplicationType.NONE)
.run(args); // helloWorld Bean 是否存在
String helloWorld =
context.getBean("helloWorld", String.class);
System.out.println("helloWorld Bean : " + helloWorld);
// 关闭上下文
context.close();
}
}

EnableAutoBootstrap.java

2) spring.factories 配置自动装配

# 自动装配
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.vstudy.web.configuration.HelloWorldAutoConfiguration

3)实现自动装配:

@Configuration // Spring 模式注解装配
@EnableHelloWorld // Spring @Enable 模块装配
//@ConditionalOnSystemProperty(name = "user.name", value = "Mercy") // 条件装配
public class HelloWorldAutoConfiguration {
}

总结:

  • @Configuration类配置方式代替xml配置方式。
  • 注解也层次性和派生性
  • 在注解类(@EnableXxx)上可以使用@Import将配置类(可以不写@Configuration)放入spring容器中,该配置类的配置会生效,@Enable装配的粒度相对于@XxxAutoConfiguration较小
  • 在@XxxAutoConfiguration(模块)上可以使用@EnableXxx完成模式装配,也可以在配置类中配置模块的其他信息。

3 SpringApplication

3.1 SpringApplication运行

SpringApplication.run(DemoApplication.class, args);

end

spring boot2.0的更多相关文章

  1. Spring Boot2.0 设置拦截器

    所有功能完成 配置登录认证 配置拦截器 在spring boot2.0 之后 通过继承这个WebMvcConfigurer类 就可以完成拦截 新建包com.example.interceptor; 创 ...

  2. Spring Boot2.0 静态资源被拦截问题

    在Spring Boot2.0+的版本中,只要用户自定义了拦截器,则静态资源会被拦截.但是在spring1.0+的版本中,是不会拦截静态资源的. 因此,在使用Spring Boot2.0+时,配置拦截 ...

  3. Spring Boot2.0使用Spring Security

     一.Spring Secutity简介     Spring 是一个非常流行和成功的 Java 应用开发框架.Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性 ...

  4. spring boot2.0(一 ) 基础环境搭建

    1.基础配置 开发环境:window jdk版本:1.8(spring boot2.0最低要求1.8) 开发工具:eclipse 构建方式:maven3 2.POM配置文件 <project x ...

  5. Spring Boot2.0 整合 Kafka

    Kafka 概述 Apache Kafka 是一个分布式流处理平台,用于构建实时的数据管道和流式的应用.它可以让你发布和订阅流式的记录,可以储存流式的记录,并且有较好的容错性,可以在流式记录产生时就进 ...

  6. Spring Boot2.0自定义配置文件使用

    声明: spring boot 1.5 以后,ConfigurationProperties取消locations属性,因此采用PropertySource注解配合使用 根据Spring Boot2. ...

  7. Spring boot2.0 设置文件上传大小限制

    今天把Spring boot版本升级到了2.0后,发现原来的文件上传大小限制设置不起作用了,原来的application.properties设置如下: spring.http.multipart.m ...

  8. spring boot 2.0(一)权威发布spring boot2.0

    Spring Boot2.0.0.RELEASE正式发布,在发布Spring Boot2.0的时候还出现一个小插曲,将Spring Boot2.0同步到Maven仓库的时候出现了错误,然后Spring ...

  9. 【spring cloud】spring cloud2.X spring boot2.0.4调用feign配置Hystrix Dashboard 和 集成Turbine 【解决:Hystrix仪表盘Unable to connect to Command Metric Stream】【解决:Hystrix仪表盘Loading...】

    环境: <java.version>1.8</java.version><spring-boot.version>2.0.4.RELEASE</spring- ...

  10. 【spring boot】整合LCN,启动spring boot2.0.3 启动报错:Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.

    spring boot 2.0.3启动报错: Error starting ApplicationContext. To display the conditions report re-run yo ...

随机推荐

  1. AssertJ断言系列-----------<数据库断言三>

    其实,是有很多种数据断言的使用.那么,我们在接口的测试中,到底应不应该加上数据库断言呢?我的观点是,视情况而定:某一些特殊的场景或者特殊的业务,那么我们就一定要加上数据库断言.不是我们测试人员,不相信 ...

  2. iOS 本地时间 / UTC时间 / 时间戳等操作 / 获取当前年月日

    //获得当前时间并且转为字符串 - (NSString *)dateTransformToTimeString { NSDate *currentDate = [NSDate date];//获得当前 ...

  3. 46.ActiveMQ开篇(Hello World、安全认证、Connection、Session、MessageProducer、MessageConsumer)

    要给有能力的人足够的发挥空间,公司可以养一些能力平平甚至是混日子的人,但绝不能让这些人妨碍有能力的人,否则这样的环境不留也罢. 一.背景介绍 CORBA\DCOM\RMI等RPC中间件技术已经广泛应用 ...

  4. CODEVS-新斯诺克

    原题地址:新斯诺克 题目描述 Description 斯诺克又称英式台球,是一种流行的台球运动.在球桌上,台面四角以及两长边中心位置各有一个球洞,使用的球分别为1 个白球,15 个红球和6 个彩球(黄 ...

  5. 皕杰报表 javax.naming.NameNotFoundException: Name jdbc is not bound in this Context

    今天做报表的时候,跳转到显示报表页面的时候不出来数据,报错说数据集未产生. 后台报错 javax.naming.NameNotFoundException: Name jdbc is not boun ...

  6. 05-树9 Huffman Codes (30 分)

    In 1953, David A. Huffman published his paper "A Method for the Construction of Minimum-Redunda ...

  7. PHP常见缓存机制

    PHP常用的几种缓存机制_PHP教程 普遍缓存技术 数据缓存:这里所说的数据缓存是指数据库查询PHP缓存机制,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据, ...

  8. Q64 最小路径和

    给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [ [1,3,1], [1,5,1], ...

  9. wireshark 抓包

    Wireshark(前称Ethereal)是一个网络数据包分析软件.网络数据包分析软件的功能是截取网络数据包,并尽可能显示出最为详细的网络数据包数据.Wireshark使用WinPCAP作为接口,直接 ...

  10. 七,OpenERP 移库操作模块

    整个代码中比较关键的地方是如何统计出不同库位的产品数量.