String、StringBuffer、StringBuilder三者区别
String 是 Java 中基础且重要的类,被声明为 final class,是不可变字符串。因为它的不可变性,所以拼接字符串时候会产生很多无用的中间对象,如果频繁的进行这样的操作对性能有所影响。
StringBuffer 就是为了解决大量拼接字符串时产生很多中间对象问题而提供的一个类。它提供了 append 和 add 方法,可以将字符串添加到已有序列的末尾或指定位置,它的本质是一个线程安全的可修改的字符序列。
在很多情况下我们的字符串拼接操作不需要线程安全,所以 StringBuilder 登场了。StringBuilder 是 JDK1.5 发布的,它和 StringBuffer 本质上没什么区别,就是去掉了保证线程安全的那部分,减少了开销。
线程安全:
StringBuffer:线程安全
StringBuilder:线程不安全
速度:
一般情况下,速度从快到慢为 StringBuilder > StringBuffer > String,当然这是相对的,不是绝对的。
使用环境:
操作少量的数据使用 String。
单线程操作大量数据使用 StringBuilder。
多线程操作大量数据使用 StringBuffer。
Java集合
什么是依赖注入
spring依赖注入的理解
https://blog.csdn.net/hj1997a/article/details/82822671
什么是Bean
在 Spring 中,构成应用程序主干并由Spring IoC容器管理的对象称为bean。bean是一个由Spring IoC容器实例化、组装和管理的对象。
概念简单明了,我们提取处关键的信息:
bean是对象,一个或者多个不限定
bean由Spring中一个叫IoC的东西管理
我们的应用程序由一个个bean构成
IoC就是一个对象定义其依赖关系而不创建它们的过程。
这里我们可以细分为两个点。
第1点:使用私有属性保存依赖对象,并且只能通过构造函数参数传入,
第2点:不用new,让Spring控制new过程。
至于bean,则是几个概念。
概念1:Bean容器,或称spring ioc容器,主要用来管理对象和依赖,以及依赖的注入。
概念2:bean是一个Java对象,根据bean规范编写出来的类,并由bean容器生成的对象就是一个bean。
概念3:bean规范。
bean规范如下:
所有属性为private
提供默认构造方法
提供getter和setter
实现serializable接口
Bean的创建方式&&Bean的使用方式
SpringBoot基础篇Bean之基本定义与使用
https://blog.csdn.net/liuyueyi25/article/details/83244239
@Autowired、@Inject、@Resource三者区别
annotation之@Autowired、@Inject、@Resource三者区别
https://www.cnblogs.com/pjfmeng/p/7551340.html
Springboot Enable*注解
springboot的注解
https://www.javazhiyin.com/21477.html
注解 描述
@EnableAsync 开启异步任务的支持(多线程)
@EnableScheduling 开启对计划任务的支持(定时器)
@EnableWebMVC 开启对Web MVC 的配置支持
@EnableAaspectJAutoProxy 开启Spring 对 这个切面(Aspect )的支持
@EnableConfigurationProperties 开启对@ConfigurationProperties注解配置Bean的支持
@EnableJpaRepositories 开启对Spring Data JAP Repository 的支持
@EnableTransactionManagement 开启对注解式事物的支持
@EnableCaching 开启注解是缓存的支持.
@EnableDiscoveryClient 让服务发现服务器,使用服务器.Spring cloud 实现服务发现
@EnableEurekaServer 注册服务器 spring cloud 实现服务注册
@EnableScheduling 让spring可以进行任务调度,功能类似于spring.xml文件中的命名空间
@EnableCaching 开启Cache缓存支持
SpringBoot 分层设计
Spring Boot框架model层、dao层、service层、controller层分析设计
https://blog.csdn.net/Just_learn_more/article/details/90665009
初学SpringBoot框架: Dao层、Service层、Controller层的作用
https://blog.csdn.net/LL142857/article/details/89242816
Springboot的 entity,dao,service,controller层级理解(从最底层向上的顺序)
https://blog.csdn.net/liang841451955/article/details/96423422
SpringBoot Web相关注解
SpringBoot Web开发
SpringBoot Web开发
https://blog.csdn.net/zjfceo/article/details/103419987
Springboot配置文件
Spring4.x与SpringBoot都推荐使用Java配置
xml配置:将bean的信息配置在xml配置文件中
注解配置:在对应的bean上使用注解将该bean添加到ioc容器中
Java配置:可以完全替代xml配置。(推荐)
@Configuration声明当前类是一个配置类,相当于Spring的一个配置文件。
@Bean注解在方法上,声明当前方法的返回值是一个Bean。
SpringBoot实战笔记:01_Spring中的Java配置
SpringBoot实战笔记:01_Spring中的Java配置
https://blog.csdn.net/android_zyf/article/details/79579862
Springboot中AOP
连接点(Joinpoint) :
程序能够应用通知的一个“时机”,这些“时机”就是连接点,例如方法被调用时、异常被抛出时等等。——可以理解为被aop拦截的类或者方法就是连接点。
通知(Advice) :
通知定义了切面是什么以及何时使用。描述了切面要完成的工作和何时需要执行这个工作。——可以理解为被注解有@Before等advice注解的安全校验的方法,拦截了过来的请求要做什么逻辑的校验。
切入点(Pointcut) :
通知定义了切面要发生的“故事”和时间,那么切入点就定义了“故事”发生的地点,例如某个类或方法的名称。——可以理解为切面切向哪里?是个类或者某层的包路径。
目标对象(Target Object) :
即被通知的对象。
AOP代理(AOP Proxy)
在Spring AOP中有两种代理方式,JDK动态代理和CGLIB代理。默认情况下,TargetObject实现了接口时,则采用JDK动态代理;反之,采用CGLIB代理。
织入(Weaving)把切面应用到目标对象来创建新的代理对象的过程,织入一般发生在如下几个时机:
(1)编译时:当一个类文件被编译时进行织入,这需要特殊的编译器才能做到,例如AspectJ的织入编译器;
(2)类加载时:使用特殊的ClassLoader在目标类被加载到程序之前增强类的字节代码;
(3)运行时:切面在运行的某个时刻被织入,SpringAOP就是以这种方式织入切面的,原理是使用了JDK的动态代理。
通知(Advice)类型的说明
@Before 前置通知(Before advice) :在某连接点(JoinPoint)——核心代码(类或者方法)之前执行的通知,但这个通知不能阻止连接点前的执行。为啥不能阻止线程进入核心代码呢?因为@Before注解的方法入参不能传ProceedingJoinPoint,而只能传入JoinPoint。要知道从aop走到核心代码就是通过调用ProceedingJionPoint的proceed()方法。而JoinPoint没有这个方法。
这里牵扯区别这两个类:Proceedingjoinpoint 继承了 JoinPoint 。是在JoinPoint的基础上暴露出 proceed 这个方法。proceed很重要,这个是aop代理链执行的方法。暴露出这个方法,就能支持 aop:around 这种切面(而其他的几种切面只需要用到JoinPoint,这跟切面类型有关), 能决定是否走代理链还是走自己拦截的其他逻辑。建议看一下 JdkDynamicAopProxy的invoke方法,了解一下代理链的执行原理。这样你就能明白 proceed方法的重要性。
@After 后通知(After advice) :当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。
@AfterReturning 返回后通知(After return advice) :在某连接点正常完成后执行的通知,不包括抛出异常的情况。
@Around 环绕通知(Around advice) :包围一个连接点的通知,类似Web中Servlet规范中的Filter的doFilter方法。可以在方法的调用前后完成自定义的行为,也可以选择不执行。这时aop的最重要的,最常用的注解。用这个注解的方法入参传的是ProceedingJionPoint pjp,可以决定当前线程能否进入核心方法中——通过调用pjp.proceed();
@AfterThrowing 抛出异常后通知(After throwing advice) : 在方法抛出异常退出时执行的通知。
advice(通知)注解的执行先后顺序
SpringBoot AOP实例
SpringBoot AOP
https://blog.csdn.net/qq_35006663/article/details/102650735
Springboot Aop整合
https://blog.csdn.net/qq_43084651/article/details/103543072
Springboot Controller相关注解
@PathVariable
当使用@RequestMapping URI template 样式映射时,@PathVariable能使传过来的参数绑定到路由上,这样比较容易写出restful api,看代码
@RequestMapping(value="/{id}", method=RequestMethod.GET)
public List<Map<String, Object>> getUser(@PathVariable Integer id) {
return userService.getUserById(id);
}
上面这个接口可通过get请求 http://xxxxx/1111来得到想要的数据,1111既是getUser的方法参数又是@RequestMapping的路由。如果方法参数不想写成和路由一样的应该怎么办?看代码:
@RequestMapping(value="/{uid}", method=RequestMethod.GET)
public List<Map<String, Object>> getUser(@PathVariable(“uid”) Integer id) {
return userService.getUserById(id);
}
在@PathVariable后面接入“uid”就可以了。
@RequestParam
@RequestParam和@PathVariable的区别就在于请求时当前参数是在url路由上还是在请求的body上,例如有下面一段代码:
@RequestMapping(value="", method=RequestMethod.POST)
public String postUser(@RequestParam(value=“phoneNum”, required=true) String phoneNum ) String userName) {
userService.create(phoneNum, userName);
return “success”;
}
这个接口的请求url这样写:http://xxxxx?phoneNum=xxxxxx,也就是说被@RequestParam修饰的参数最后通过key=value的形式放在http请求的Body传过来,对比下上面的@PathVariable就很容易看出两者的区别了。
@RequestBody
@RequestBody能把简单json结构参数转换成实体类,如下代码:
@RequestMapping(value = “/testUser”, method = RequestMethod.POST)
public String testUser(@RequestBody User user){
System.out.print(user.getAge());
return “success”;
}
参数为:
{“id”:1,“user”:“pkxutao”,“name”:“name”,“age”:18}
注意请求的content type要设置为application/json
@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML
数据,需要注意的呢,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
@RequestMapping("/login")
@ResponseBody
public User login(User user){
return user;
}
User字段:userName pwd 那么在前台接收到的数据为:’{“userName”:“xxx”,“pwd”:“xxx”}’
效果等同于如下代码:
@RequestMapping("/login")
public void login(User user, HttpServletResponse response){
response.getWriter.write(JSONObject.fromObject(user).toString());
}
SpringBoot系列学习文章-入门
Spring Boot -01- 快速入门篇(图文教程)
https://blog.csdn.net/qq_40147863/article/details/84194493
@RequestBody的使用
https://blog.csdn.net/Thinkingcao/article/details/101030338
一文读懂 Spring Boot 配置文件 application.properties !
https://blog.csdn.net/Thinkingcao/article/details/102611095
Spring Boot中的yaml配置简介
https://blog.csdn.net/Thinkingcao/article/details/102612074
SpringBoot 系列教程(一):springboot多环境(dev、test、prod)配置
https://blog.csdn.net/Thinkingcao/article/details/82798781
SpringBoot 系列教程(二):spring boot 热部署devtools实现
https://blog.csdn.net/Thinkingcao/article/details/83345755
SpringBoot 系列教程(三):@SpringBootApplication与@EnableAutoConfiguration区别
https://blog.csdn.net/Thinkingcao/article/details/83859860
SpringBoot 系列教程(四):SpringBoot的properties和yml两种配置方式, 配置注入参数, 以及配置文件读取失效的问题
https://blog.csdn.net/Thinkingcao/article/details/83901157
SpringBoot 系列教程(五):修改Spring Boot启动时的默认图案Banner
https://blog.csdn.net/Thinkingcao/article/details/84025786
SpringBoot 系列教程(六):springboot 项目启动读取按照顺序读取配置文件
https://blog.csdn.net/Thinkingcao/article/details/84305099
SpringBoot 系列教程(十一):Spring中application.properties属性配置
https://blog.csdn.net/Thinkingcao/article/details/84820776
SpringBoot 系列教程(十七):springboot maven 多环境配置
https://blog.csdn.net/Thinkingcao/article/details/86607448
SpringBoot 系列教程(二十一):StringBoot项目在外部tomcat环境下部署
https://blog.csdn.net/Thinkingcao/article/details/86649735
SpringBoot 系列教程(二十二):SpringBoot基于Profile的几种多环境配置方式
https://blog.csdn.net/Thinkingcao/article/details/87284097
SpringBoot 系列教程(二十三) :使用@Order注解调整配置类加载顺序
https://blog.csdn.net/Thinkingcao/article/details/84801093
SpringBoot 系列教程(二十六):Spring Boot 集成 Lombok 让代码更简洁
https://blog.csdn.net/Thinkingcao/article/details/87690618
SpringBoot 系列教程(二十七):SpringBoot属性配置文件详解
https://blog.csdn.net/Thinkingcao/article/details/87713215
SpringBoot中application.properties各种属性配置大全
https://blog.csdn.net/Thinkingcao/article/details/87864297
SpringBoot 系列教程(三十五):Spring Boot解决项目启动时初始化资源
https://blog.csdn.net/Thinkingcao/article/details/87873391
SpringBoot 系列教程(三十六):SpringBoot如何测试打包部署
https://blog.csdn.net/Thinkingcao/article/details/87873774
SpringBoot 系列教程(三十七):SpringBoot启动参数设置
https://blog.csdn.net/Thinkingcao/article/details/88212184
SpringBoot 系列教程(三十九):SpringBoot+Maven多模块项目(创建、依赖、打包可执行jar包部署测试)完整流程
https://blog.csdn.net/Thinkingcao/article/details/88637811
SpringBoot 系列教程(四十五):Springboot启动原理之@SpringBootApplication
https://blog.csdn.net/Thinkingcao/article/details/99672083
SpringBoot 系列教程(五十):Spring Boot 1.X生命周期已结束 ,Spring Boot 2.X 走向舞台中心
https://blog.csdn.net/Thinkingcao/article/details/101446958
SpringBoot 系列教程(五十三):理解 pom.xml 中的 parent
https://blog.csdn.net/Thinkingcao/article/details/102597139
SpringBoot 系列教程(五十四):SpringBoot自定义favicon.ico配置
https://blog.csdn.net/Thinkingcao/article/details/101758712
SpringBoot 系列教程(七十九):SpringBoot与SpringMVC的关系
https://blog.csdn.net/Thinkingcao/article/details/103516018
SpringBoot 系列教程(八十):SpringBoot三种注解启动方式
https://blog.csdn.net/Thinkingcao/article/details/103518511
SpringBoot 系列教程(八十二):Intellij IDEA实现SpringBoot项目启动多个端口
https://blog.csdn.net/Thinkingcao/article/details/103570723
SpringBoot系列学习文章-监控中心Actuator
SpringBoot 系列教程(七):搭建SpringBoot监控中心Actuator
https://blog.csdn.net/Thinkingcao/article/details/84337421
SpringBoot 系列教程(八):搭建Spring Boot Admin分布式微服务监控中心
https://blog.csdn.net/Thinkingcao/article/details/84339398
SpringBoot系列学习文章-数据持久层
SpringBoot 系列教程(九):Spring boot 数据源未配置,启动异常
https://blog.csdn.net/Thinkingcao/article/details/84787555
SpringBoot 系列教程(十):搭建SpringBoot集成Mybatis+druid连接池监控
https://blog.csdn.net/Thinkingcao/article/details/84787124
SpringBoot 系列教程(十三):SpringBoot集成EasyPoi实现Excel导入导出
https://blog.csdn.net/Thinkingcao/article/details/85005930
SpringBoot 系列教程(十六):SpringBoot集成Spring Data-JPA实现增删改查
https://blog.csdn.net/Thinkingcao/article/details/85161578
SpringBoot 系列教程(三十):SpringBoot整合Mybatis增删改查注解版
https://blog.csdn.net/Thinkingcao/article/details/87790879
SpringBoot 系列教程(三十一):SpringBoot集成JDBCTemplate
https://blog.csdn.net/Thinkingcao/article/details/87800378
SpringBoot 系列教程(三十二):SpringBoot整合Redis缓存
https://blog.csdn.net/Thinkingcao/article/details/87804409
SpringBoot 系列教程(五十八):SpringBoot整合Mybatis+BootStrap增删改查XML版
https://blog.csdn.net/Thinkingcao/article/details/103161037
SpringBoot 系列教程(七十七):SpringBoot整合ehcache缓存
https://blog.csdn.net/Thinkingcao/article/details/103496195
SpringBoot 系列教程(七十八):Spring Boot整合Memcached缓存
https://blog.csdn.net/Thinkingcao/article/details/103879246
SpringBoot系列学习文章-精选项目
SpringBoot 系列教程(十二):给大家推荐8个SpringBoot精选项目
https://blog.csdn.net/Thinkingcao/article/details/84828612
SpringBoot系列学习文章-WEB
SpringBoot 系列教程(十四):springboot集成使用RestTemplate模板,实现Rest 服务调用
https://blog.csdn.net/Thinkingcao/article/details/85058449
SpringBoot 系列教程(十八):SpringBoot通过url访问获取内部或者外部磁盘图片
https://blog.csdn.net/Thinkingcao/article/details/86613066
SpringBoot 系列教程(二十):SpringBoot解决前后端跨域问题addCorsMappings
https://blog.csdn.net/Thinkingcao/article/details/86615276
SpringBoot 系列教程(二十四):springboot项目之登陆缓存session至redis和cookies
https://blog.csdn.net/Thinkingcao/article/details/87349534
SpringBoot 系列教程(二十五):springboot项目之登出删除缓存session至redis和cookies
https://blog.csdn.net/Thinkingcao/article/details/87351521
SpringBoot 系列教程(二十九)SpringBoot整合Thymeleaf模板引擎
https://blog.csdn.net/Thinkingcao/article/details/103270126
SpringBoot 系列教程(三十四):Spring Boot集成freemarker模板引擎渲染web视图
https://blog.csdn.net/Thinkingcao/article/details/87864517
SpringBoot 系列教程(四十):SpringBoot2.0基本Web开发
https://blog.csdn.net/Thinkingcao/article/details/88658148
SpringBoot 系列教程(四十二):SpringBoot配置静态资源地址和访问路径
https://blog.csdn.net/Thinkingcao/article/details/99581482
SpringBoot 系列教程(五十六):SpringBoot配置SSL证书使用HTTPS访问
https://blog.csdn.net/Thinkingcao/article/details/102967920
SpringBoot 系列教程(五十七):SpringBoot跳转static目录下静态html页面
https://blog.csdn.net/Thinkingcao/article/details/103056729
SpringBoot 系列教程(六十四):Spring Boot 中的静态资源到底要放在哪里?
https://blog.csdn.net/Thinkingcao/article/details/102605193
SpringBoot 系列教程(八十一):Spring Boot使用Token鉴权Api接口之前后端分离架构设计
https://blog.csdn.net/Thinkingcao/article/details/103566421
SpringBoot系列学习文章-分布式
SpringBoot 系列教程(十五):SpringBoot集成Dubbo搭建分布式服务
https://blog.csdn.net/Thinkingcao/article/details/85121228
SpringBoot系列学习文章-日志
SpringBoot 系列教程(十九):基于SpringBoot自定义注解和AOP实现日志记录
https://blog.csdn.net/Thinkingcao/article/details/86615088
SpringBoot 系列教程(四十七):SpringBoot集成logback日志组件
https://blog.csdn.net/Thinkingcao/article/details/100659620
SpringBoot 系列教程(四十八):SpringBoot默认日志配置
https://blog.csdn.net/Thinkingcao/article/details/100667175
SpringBoot 系列教程(四十九):SpringBoot配置控制台输出彩色日志
https://blog.csdn.net/Thinkingcao/article/details/100699068
SpringBoot项目控制台打印Spring日志级别控制(屏蔽org.springframework.*)
https://blog.csdn.net/Thinkingcao/article/details/84988392
SpringBoot 系列教程(六十八):SpringBoot针对不同环境的日志配置
https://blog.csdn.net/Thinkingcao/article/details/103316315
SpringBoot系列学习文章-工具
SpringBoot 系列教程(二十八):SpringBoot集成Swagger2
https://blog.csdn.net/Thinkingcao/article/details/87717672
SpringBoot 系列教程(四十三):SpringBoot2.x集成Swagger2配置(解决404报错)
https://blog.csdn.net/Thinkingcao/article/details/97803697
SpringBoot 系列教程(四十四):SpringBoot2.x(2.1.6)集成Swagger2.x(2.6.1)访问静态资源404与访问swagger-ui.html404的问题
https://blog.csdn.net/Thinkingcao/article/details/99450363
SpringBoot 系列教程(五十一):SpringBoot + Mybatis plus集成AutoGenerator自动生成代码
https://blog.csdn.net/Thinkingcao/article/details/101696120
SpringBoot 系列教程(五十二):SpringBoot集成Mybatis plus实现增删改查
https://blog.csdn.net/Thinkingcao/article/details/101704497
SpringBoot 系列教程(五十五):SpringBoot整合MapStruct自动映射DTO
https://blog.csdn.net/Thinkingcao/article/details/102907994
SpringBoot 系列教程(六十):SpringBoot整合Swagger-Bootstrap-Ui
https://blog.csdn.net/Thinkingcao/article/details/103264748
SpringBoot 系列教程(六十一):Spring Boot 修改静态资源不用重启项目,一个LiveReload(自动刷新)全搞定
https://blog.csdn.net/Thinkingcao/article/details/102620032
SpringBoot 系列教程(六十三):SpringBoot使用pageHelper超过最大页数后还会返回数据
https://blog.csdn.net/Thinkingcao/article/details/102721195
SpringBoot 系列教程(六十六):SpringBoot整合使用Spring-Session
https://blog.csdn.net/Thinkingcao/article/details/103316268
SpringBoot系列教程(六十七):SpringBoot自定义Fastjson为JSON消息转换器
https://blog.csdn.net/Thinkingcao/article/details/103407945
SpringBoot 系列教程(七十二):SpringBoot2.x整合Swagger2异常 For input string: “” at java.lang.NumberF
https://blog.csdn.net/Thinkingcao/article/details/103258801
SpringBoot 系列教程(七十三): Spring Boot整合Zxing生成二维码
https://blog.csdn.net/Thinkingcao/article/details/103768390
SpringBoot系列学习文章-邮件
SpringBoot 系列教程(三十三):Spring Boot集成JavaMailSender发送邮件
https://blog.csdn.net/Thinkingcao/article/details/87862005
SpringBoot系列学习文章-文件
SpringBoot 系列教程(三十八):SpringBoot单文件上传/下载,多文件上传
https://blog.csdn.net/Thinkingcao/article/details/88322615
SpringBoot系列学习文章-MQ
SpringBoot 系列教程(四十一):SpringBoot集成RocketMQ(多模块方式)
https://blog.csdn.net/Thinkingcao/article/details/90933286
SpringBoot系列学习文章-国际化
SpringBoot 系列教程(四十六):SpringBoot集成i18n国际化配置
https://blog.csdn.net/Thinkingcao/article/details/100119776
SpringBoot系列学习文章-部署
Spring Boot 系列教程(五十九):Spring Boot打war包部署到外部Tomcat
https://blog.csdn.net/Thinkingcao/article/details/103201279
SpringBoot系列学习文章-服务端推送事件
SpringBoot 系列教程(六十九):SpringBoot2.x整合SSE服务端实时单向推送消息
https://blog.csdn.net/Thinkingcao/article/details/103316364
SpringBoot系列学习文章-Shiro
SpringBoot 系列教程(七十一):SpringBoot整合Shiro
https://blog.csdn.net/Thinkingcao/article/details/103363179
SpringBoot系列学习文章-学习资料汇总
码农小胖哥SpringBoot中文文档
https://felord.cn/_doc/_springboot/2.1.5.RELEASE/_book/
手摸手教你SpringBoot2.x(持续更新)
http://springboot.zimug.com/1199242
纯洁的微笑SpringBoot中文导航
http://springboot.fun/
SpringBoot系列学习文章-定时任务
SpringBoot 系列教程(七十五):SpringBoot整合定时任务Scheduled
https://blog.csdn.net/Thinkingcao/article/details/103485206
SpringBoot 系列教程(七十六):SpringBoot整合定时任务Quartz
https://blog.csdn.net/Thinkingcao/article/details/103490411
d
来源:CSDN
作者:fanxiaolu2010
链接:https://blog.csdn.net/fanxiaolu2010/article/details/104044845