@SpringBootApplication用于注解Spring启动类,如下所示

 @SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

这个启动类带有@SpringBootApplication标记,并且在启动类的main方法中调用SpringApplication.run方法。run方法接收两个参数,第一个参数是带有@Configuration标记的主配置类的类型(这里刚好和启动类同名了,但这不是必须的)

@SpringBootApplication的定义如下

 @Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
...
}

由上面可以看出,应用了@SpringBootApplication就相当于同时应用了@Configuration, @ComponentScan和@EnableAutoConfiguration这三个注解。不过每次要加三个注解比较麻烦,可以用一个代替

@Configuration用于表明这个类是一个配置类,Spring可以从这个类的成员变量或者方法中加载配置信息

@ComponentScan 的作用就是根据定义的扫描路径,把符合扫描规则的类装配到spring容器中

Spring Boot中的几个关键类:

1.SpringApplication:通过创建该类的实例(一般直接调用SpringApplication.run方法),对程序进行高级配置

SpringApplication app = new SpringApplication(SpringBootSimpleApplication.class);
app.setBanner(new Banner() {
@Override
public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) {
out.print("\n\n\tThis is my own banner!\n\n".toUpperCase());
}
});
app.run(args);
SpringApplication app = new SpringApplication(SpringBootSimple
Application.class);
app.setBannerMode(Banner.Mode.OFF);
app.run(args);

2.SpringApplicationBuilder:该类提供可链式调用的API用于创建SpringApplication和ApplicationContext实例

public class SpringBootSimpleApplication {
  public static void main(String[] args) {
    new SpringApplicationBuilder()
    .bannerMode(Banner.Mode.OFF)
    .sources(SpringBootSimpleApplication.class)
    .run(args);
  }
}

CommandLineRunner和ApplicationRunner

如果想在Spring Boot服务完成启动之前,执行一些操作(类似Asp.Net中的Application_Start事件),就需要用到CommandLineRunner或者ApplicationRunner这两个接口

具体用法为:这两个接口都有run()方法,你需要在其实现类中重写run()方法,创建这两个接口(任意一个即可)类型的bean, Spring Boot会自动检测到这一类的bean,在启动完成后,立即调用其run()方法,你可以在run方法里做一些类似初始化数据、删除之前的临时文件等之类的操作。如果有多个这样的Bean需要在启动时执行,可以用@Order来标明执行的顺序

这两个接口的区别是run()接收的参数类型不同:CommandLineRunner.run(String...args)   ApplicationRunner.run(ApplicationArguments arg0)

使用方法如下:

CommandLineRunner:

//方式一
@Component
public class CommandLineRunnerBead implements CommandLineRunner { @Override
public void run(String... args) throws Exception {
String strArgs = Arrays.stream(args).collect(Collectors.joining("|"));
log.info("Application starts with arguments:"+strArgs);
}
} //方式2
@Bean
CommandLineRunner runJustBeforeStartup() {
return args -> {
String strArgs = Arrays.stream(args).collect(Collectors.joining("|"));
log.info("Application starts with arguments:"+strArgs);
};
}

ApplicationRunner:

//方式一
@Component
public class ApplicationRunnerBead implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
String strArgs = Arrays.stream(args.getSourceArgs()).collect(Collectors.joining("|"));
log.info("Application starts with arguments:" + strArgs);
}
} //方式二
@Bean
ApplicationRunner runJustBeforeStartup() {
return args -> {
String strArgs = Arrays.stream(args.getSourceArgs()).collect(Collectors.joining("|"));
log.info("Application starts with arguments:" + strArgs);
};
}

@Autowired:用于修饰成员变量,从容器中查找类型匹配的Bean,然后把这个Bean赋值给被修饰的变量,如果有多个类型匹配的Bean,容器会按名称进行匹配,即注册Bean时会指定一个名称(也可不指定名称,默认应该是类的名字,没有了解)

@Bean用于修饰一个方法,这个方法会返回一个对象,Spring把这个对象注册为容器中的一个Bean

@Component用于修饰一个类的定义,Spring会创建一个这个类的实例,把这个实例对象注册为容器中的一个Bean

@Component@Bean的区别是:@Component是纯声明式的,不能添加任何产生Bean的逻辑,并且只能是自己写的类;而@Bean是通过方法生成一个Bean,可以添加生成Bean的逻辑(例如根据不同的条件生成不同的Bean),并且@Bean可以作用于第三方类

配置应用程序属性:

常用应用程序属性列表:https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

配置文件通常为application.properties或者application.yml, 放在程序根目录下

可能通过@Value注解获取这些属性值,比如rc/main/resources/application.properties文件中有如下配置项

data.server=remoteserver:3030

可通过如下代码获取该配置值

//...
@Service
public class MyService {
@Value("${data.server}")
private String server;
//...
}

Spring Boot查找应用程序配置属性的优先级顺序:

• Command-line arguments
• SPRING_APPLICATION_JSON
• JNDI (java:comp/env)
• System.getProperties()
• OS Environment variables
• RandomValuePropertySource (random.*)
• Profile-specific (application-{profile}.jar) outside of the package jar.
• Profile-specific (application-{profile}.jar) inside of the package jar.

• Application properties (application.properties) outside of the package jar.
• Application properties (application.properties) inside of the package jar.
• @PropertySource
• SpringApplication.setDefaultProperties

Spring Boot学习笔记(1)的更多相关文章

  1. Spring Boot学习笔记2——基本使用之最佳实践[z]

    前言 在上一篇文章Spring Boot 学习笔记1——初体验之3分钟启动你的Web应用已经对Spring Boot的基本体系与基本使用进行了学习,本文主要目的是更加进一步的来说明对于Spring B ...

  2. Spring Boot 学习笔记(六) 整合 RESTful 参数传递

    Spring Boot 学习笔记 源码地址 Spring Boot 学习笔记(一) hello world Spring Boot 学习笔记(二) 整合 log4j2 Spring Boot 学习笔记 ...

  3. Spring Boot 学习笔记1——初体验之3分钟启动你的Web应用[z]

    前言 早在去年就简单的使用了一下Spring Boot,当时就被其便捷的功能所震惊.但是那是也没有深入的研究,随着其在业界被应用的越来越广泛,因此决定好好地深入学习一下,将自己的学习心得在此记录,本文 ...

  4. Spring Boot 学习笔记1---初体验之3分钟启动你的Web应用

    前言 早在去年就简单的使用了一下Spring Boot,当时就被其便捷的功能所震惊.但是那是也没有深入的研究,随着其在业界被应用的越来越广泛,因此决定好好地深入学习一下,将自己的学习心得在此记录,本文 ...

  5. Spring Boot 学习笔记--整合Thymeleaf

    1.新建Spring Boot项目 添加spring-boot-starter-thymeleaf依赖 <dependency> <groupId>org.springfram ...

  6. 我的第一个spring boot程序(spring boot 学习笔记之二)

    第一个spring boot程序 写在前面:鉴于spring注解以及springMVC的配置有大量细节和知识点,在学习理解之后,我们将直接进入spring boot的学习,在后续学习中用到注解及其他相 ...

  7. Java框架spring Boot学习笔记(六):Spring Boot事务管理

    SpringBoot和Java框架spring 学习笔记(十九):事务管理(注解管理)所讲的类似,使用@Transactional注解便可以轻松实现事务管理.

  8. Spring Boot学习笔记---Spring Boot 基础及使用idea搭建项目

    最近一段时间一直在学习Spring Boot,刚进的一家公司也正好有用到这个技术.虽然一直在学习,但是还没有好好的总结,今天周末先简单总结一下基础知识,等有时间再慢慢学习总结吧. Spring Boo ...

  9. spring boot学习笔记2

    开场知识: spring 容器注入bean,时容器初始化的一些接口以及接口调用的时间先后顺序: 1)BeanFactoryPostProcessor 容器初始化的回调方法 * BeanFactoryP ...

  10. Spring Boot学习笔记二

    Spring Boot入门第二篇 第一天的详见:https://www.cnblogs.com/LBJLAKERS/p/12001253.html 同样是新建一个pring Initializer快速 ...

随机推荐

  1. vue-cli3开干

    npm install -g @vue/cli-service-global vue create hello-world

  2. Vue-----this.$nextTick()

    Vue-----this.$nextTick() $nextTick Vue.nextTick()是在下次 DOM 更新循环结束之后执行延迟回调,在修改数据之后使用 $nextTick,则可以在回调中 ...

  3. vue项目使用qrcodejs2生成二维码

    最近写项目遇到一个需求,根据后台给的地址生成二维码,在网上找了下,qrcodejs2使用还是比较多,试了下也能实现需求,就整理下使用方法,方便以后使用   1. 安装包 cnpm i qrcodejs ...

  4. VS2015 中统计整个项目的代码行数

    在一个大工程中有很多的源文件和头文件,我如何快速统计总行数? ------解决方案--------------------b*[^:b#/]+.*$^b*[^:b#/]+.*$ ctrl + shif ...

  5. 从一道Hard学习滑动窗口

    滑动窗口 滑动窗口(sliding windows algorithm)这种方法,专门用于解决区间解的问题.它在运算的时候,将解集放在窗口中,结束的时候比对是否符合预期.在运算的过程中,会对窗口的左右 ...

  6. Eclispe造成的tomcat占用端口 无法启动 强制终止进程 转载

    很多时候运行tomcat 的时候总是会提示tomcat 的端口被占用 但是任务管理器里面还找不到是哪个端口被占用了 因此很多人就重新配置tomcat  或者去修改tomcat的端口号 ,其实这么做太麻 ...

  7. VS2012中--查找定义后从未被使用的函数

    操作步骤如下: 选择项目==>右键属性==>代码分析(选择Microsoft的所有规则) 注:默认为 托管建议规则 注:CA1804 CA1811规则 例如需要查看某个项目从未被使用的函数 ...

  8. linux工具之lsof

      1.lsof  ( list    open   files)   lsof(list open files) 是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通 ...

  9. Rsync+Sersync实时同步数据目录

    第1章 Rsync简介 1.1 Rsync基本概述 rsync是一款开源的备份工具,可以在不同主机之间进行同步,可实现全量备份与增量备份 全量:将全部数据,进行传输覆盖 增量:只传输差异部分的数据 1 ...

  10. Redis02——Redis单节点安装

    Redis单节点安装 一.Redis的数据类型 string hash list set zset 二.安装 2.1.下载 wget http://download.redis.io/releases ...