[SpringBoot] - 一份笔记
一. Spring Boot 入门
1. Spring Boot 简介
简化Spring应用开发的一个框架;
整个Spring技术栈的一个大整合;
J2EE开发的一站式解决方案;
2. 微服务
2014, martin fowler 提出
微服务 : 架构风格(服务微化)
一个应用应该是一组小型服务;可以通过HTTP的方式进行互通;
单体应用: ALL IN ONE , 比如之前的教育项目,整个打包后在一个war或者jar中.
微服务: 每一个功能元素最终都是一个可独立替换和独立升级的软件单元;
简而言之,微服务架构风格是一种将单个应用程序开发为一套小型服务的方法,
每个小型服务都在自己的流程中运行,并于轻量级机制(通常是HTTP资源API)进行通信.
这些服务围绕业务功能构建,可通过全自动部署机制独立部署. 这些服务至少集中管理,
可以用不同的编程语言编写, 并使用不同的数据存储技术.

这种单体应用对系统的任何更改都涉及构建和部署新版本的服务器端应用程序.

以上单体应用的弊端导致了微服务架构风格的诞生: 将应用程序构建为服务套件,
除了服务可独立部署和扩展外,每个服务还提供了一个牢固的模块边界,
甚至允许以不同的编程语言编写不同的服务.
我们并不认为微服务风格是新颖的或创新的,其根源至少可以归结为Unix的设计原则.
更多:https://martinfowler.com/articles/microservices.html#
MAVEN设置:
maven的settings.xml配置文件的profiles标签:
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
简化部署:
<!-- 这个插件,可以将应用打包成一个可执行的jar包;-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
主程序类,主入口类
/**
* @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
*/
@SpringBootApplication
public class HelloWorldMainApplication { public static void main(String[] args) { // Spring应用启动起来
SpringApplication.run(HelloWorldMainApplication.class,args);
}
}
@SpringBootApplication :
Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用.
@SpringBootApplication是一个组合注解,是一个"三体"结构,实际上它是一个复合的Annotation.
三体结构指得是:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
使用以上三个注解也能使用@SpringBootApplication,同样效果,只不过还是使用@SpringBootApplication更加简洁.
查看该注解源码:其后参照JSR303的一些注解使用.参照之前的自定义注解: https://www.cnblogs.com/ukzq/p/9947870.html
其中都存在的三个注解是:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
>>>首先看Retention注解:
Retention(保留)注解,这种类型的注解会被保留到哪个阶段?
1. RetentionPolicy.SOURCE -- 这种类型的Annotations只在源代码级别保留,编译时就会被忽略.
2. RetentionPolicy.CLASS -- 这种类型的Annotations编译时被保留,在class文件中存在,但JVM会忽略.
3. RetentionPolicy.RUNTIME -- 这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其它使用反射机制的代码所读取和使用.
可以看到在@SpringBootApplication源码中,注解的保留级别为:
@Retention(RetentionPolicy.RUNTIME)
即说明该注解会被JVM保留,在运行时被JVM或其它使用反射机制的代码所读取和使用.
>>>再来看Documented注解:
Documented注解表明这个注解应该被javadoc工具记录,默认情况下,javadoc是不包括注解的,
但如果声明注解时指定了@Documented, 则它会被javadoc之类的工具处理,所以注解类型信息
也会被包括在生成的文档中.
>>>Target注解
@Target说明了Annotation所修饰的对象范围: Annotation可被用于packages, types(类,接口,枚举,Annotation类型_
类型成员(方法,构造方法,成员变量,枚举值), 方法参数和本地变量(如循环变量,catch参数). 在Annotation类型的声明中
使用了target可更加明晰其修饰的目标.
作用: 用于描述注解的使用范围(即: 被描述的注解可以在什么地方使用)
@Target的取值(ElementType)有:
1. CONSTRUCTOR : 用于描述构造器
2. FIELD : 用于描述域
3. LOCAL_VARIABLE : 用于描述局部变量
4. METHOD : 用于描述方法
5. PACKAGE : 用于描述包
6. PARAMETER : 用于描述参数
7. TYPE : 用于描述类, 接口(包括注解类型) 或enum声明.
可以看到在@SpringBootApplication的注解中Target为@Target(ElementType.TYPE),说明这是描述类和接口的.
>>>补充 Inherited 注解
这是一个稍微复杂的注解类型,它指明被注解的类会自动继承, 更具体地说, 如果定义注解时使用了@Inherited标记,
然后用定义的注解来标注另一个父类,父类又有一个子类(subclass),则父类的所有属性将被继承到它的子类中.
@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 {
>>>再说@SpringBootConfiguration : 是Spring Boot的配置类,
标注在某个类上,表示这是一个SpringBoot的配置类,
在@SpringBootConfiguration中源码没有什么卵
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration { }
最主要的是它的@Configuration注解.
@Configuration:配置类上来标注这个注解.
配置类---配置文件;配置类也是容器中的一个组件; 类似@Component可以将组件加载到ioc容器.
>>>再看@EnableAutoConfiguration注解, 字面量翻译过来就说明:这个注解是用来开启自动配置功能.
以前我们需要配置的东西,SpringBoot帮我们自动配置,@EnableAutoConfiguration告诉SpringBoot
开启自动配置功能,这样自动配置才能生效.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
在其中的@AutoConfigurationPackage注解为自动配置包注解.
@Import(AutoConfigurationImportSelector.class)是Spring的底层注解@Import,
作用是给容器导入一个组件; 导入的组件由AutoConfigurationPackages.Registrar.class
将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到
Spring容器;
[SpringBoot] - 一份笔记的更多相关文章
- SpringBoot 完整学习笔记免费分享
从0到进阶,完全系统性的学习笔记 每次我都会反复拿来观看,因为我们总会有遗漏忘记的地方,但是笔记不会. 希望大家能好好利用它,以下是笔记截图! 以上只是其中的一项部分,这份笔记可以说含金量超高,绝对会 ...
- SpringBoot -基础学习笔记 - 01
SpringBoot个人笔记-szs 一.使用thymeleaf模板引擎来指定所需资源的位置 可以做到当项目名进行更改后,模板引擎也会进行更新相关的路径;如下图展示,会自动添加crud根目录! < ...
- SpringBoot + Security学习笔记
SpringSecurity学习笔记 本以为是总结,最后写成了笔记,所以还是需要更加的努力啊. 开始的时候看了一遍官方文档,然后只看懂了加密器. 然后又学了一个尚硅谷的视频,虽然这个教程是在讲一个项目 ...
- SpringBoot Web学习笔记
一.资源的访问: 情形一.所有的 /webjars/** 都会去 classpath:/META_INFO/resource/webjars/ 下找资源: webjars:以jar包的方式引入静态 ...
- SpringBoot入门学习笔记
SpringBoot是SpringMVC的升级版,SpringBoot的特点: application.properties文件配置: server.port = 8080端口配置 server.co ...
- SpringBoot配置Aop笔记【例子】
众所周知,spring最核心的两个功能是aop和ioc,即面向切面,控制反转.这里我们探讨一下如何使用spring aop. 1.何为aop aop全称Aspect Oriented Programm ...
- SpringBoot + WebSocket 开发笔记
1. 服务端的实现,我尝试了两种方式: 第一种是用“@ServerEndPoint”注解来实现,实现简单: 第二种稍显麻烦,但是可以添加拦截器在WebSocket连接建立和断开前进行一些额外操作. 不 ...
- (转)Springboot+shiro配置笔记+错误小结
springboot不像springmvc,它没有xml配置文件,那该如何配置shiro呢,其实也不难,用java代码+注解来解决这个问题.仅以此篇记录我对shiro的学习,如有对过客造成不便,实在抱 ...
- Springboot+shiro配置笔记+错误小结
软件152 尹以操 springboot不像springmvc,它没有xml配置文件,那该如何配置shiro呢,其实也不难,用java代码+注解来解决这个问题.仅以此篇记录我对shiro的学习,如有对 ...
随机推荐
- [LeetCode] 476. Number Complement_Easy tag: Bit Manipulation
这个题目思路就是比如101 的结果是010, 可以从111^101 来得到, 那么我们就需要知道刚好比101多一位的1000, 所以利用 while i <= num : i <<= ...
- python中的re模块中的向后引用和零宽断言
1.后向引用 pattern = re.compile(r"(\w+)")#['hello', 'go', 'go', 'hello'] # pattern = re.compil ...
- SpringBoot与Docker1
1:docker是一个开源的应用容器引擎: docker支持将软件编译成一个镜像:然后再镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像: 运行中的这个镜像称为容器,容器启动是非 ...
- WPF学习笔记-用Expression Design制作矢量图然后导出为XAML
WPF学习笔记-用Expression Design制作矢量图然后导出为XAML 第一次用Windows live writer写东西,感觉不错,哈哈~~ 1.在白纸上完全凭感觉,想象来画图难度很大, ...
- 下载YouTube视频的方法
这个网站就可以: http://www.clipconverter.cc/ 更多的网站及介绍参考知乎:http://www.zhihu.com/question/19964181
- linux导出、导入sql
linux下导入.导出mysql数据库命令 一.导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径): 1.导出数据和表结构: mysqldump -u用户名 -p密码 数据 ...
- 查看.mobileprovision 详细信息
.mobileprovision 用诸如sublime 等工具是无法打开. 可以通过shell命令查看: security cms -D -i 某某.mobileprovision
- EasyUI+bootsrtap混合前端框架
EasyUI+bootsrtap混合前端框架 http://www.jeasyui.com/download/index.php用户没有登录前浏览的页面用bootsrtap框架用户登录进去后的商家管理 ...
- JS实现仿腾讯微博无刷新删除微博效果代码
这里演示JS仿腾讯微博无刷新删除效果,将显示在微博列表里的内容删除,运用AJAX技术,无刷新删除微博的内容,参考性强,希望对初学AJAX的朋友有所帮助. 在线演示地址如下: http://demo.j ...
- mariadb 10.1查看per connection内存消耗
在mariadb 10.1版本中,在information_schema.processlist表中,新增了几个字段,其中有一个memory_used,其记录的是连接的内存消耗. 同时新增了一个状态变 ...