SpringBoot
文章平均质量分 52
Spring Boot 入门到放弃。
使用的代码都来自项目:https://github.com/Pink-Smile/DatabaseDesign
学而不思则忘
一切都可以
展开
-
Spring自定义注解
Target({TYPE:作用在类、接口(包括注解类型),枚举类FIELD:字段声明(包含枚举常量)METHOD:作用于方法PARAMETER:作用于参数CONSTRUCTOR:作用于构造器。原创 2023-02-26 23:11:59 · 212 阅读 · 1 评论 -
Spring的动态AOP源码解析
1.3 xml方式使用AOP1.4 抛出问题?a. Advice的执行顺序?对比上面两张图片,可以看到**@Around、@After、@Before**这三个执行顺序有变化。在Spring5.x或6.x,省略@Around的时候,执行顺序为:关键在于@EnableAspectJAutoProxy 注解,开启了AspectJ的代理功能,顺着该注解点下去,可以在 AopConfigUtils类中找到下面这一段代码:上面就将AnnotationAwareAspectJAutoProxyCreator类原创 2022-12-19 22:34:12 · 509 阅读 · 0 评论 -
@Value注解
1. 作用可以直接赋值:@Value("string value")private String stringValue;可以使用SpEL表达式:@Value("#{systemProperties['priority']}")private String spelValue;@Value("#{systemProperties['unknown'] ?: 'some default'}")private String spelSomeDefault;@Value("#{someBe原创 2022-03-06 22:48:35 · 865 阅读 · 0 评论 -
BeanPostProcessor接口
1. 作用BeanPostProcessor接口里面有下面两个方法:实现这两个方法可以在bean的初始化前后进行操作。实现该接口的类必须注入到容器中才能生效/**Apply this BeanPostProcessor to the given new bean instance before any bean initialization callbacks (like InitializingBean's afterPropertiesSet or a custom init-method).原创 2022-03-06 21:22:29 · 657 阅读 · 0 评论 -
@PostConstruct注解和@PreDestroy注解
@PostConstruct注解作用:在bean创建完成并且属性复制完成后,执行初始化方法@PreDestroy注解使用:在bean移除之前使用上面两个注解不属于Spring,在下面依赖中:<dependency> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> <version>原创 2022-03-06 21:21:00 · 255 阅读 · 0 评论 -
@Bean指定初始化和销毁方法
1. 指定初始化和销毁方法在xml文件中可以使用init-method="" destroy-method=""来自定义Bean的初始化方法和销毁方法。也可以在@Bean注解中使用上述字段构造:单实例:在容器启动时创建对象多实例:在每次获取时创建对象初始化:对象创建完成,并且复制完成后,调用初始化方法销毁:如果是单实例,则在容器关闭时销毁实例如果是多实例,则容器关闭不会销毁,需要手动销毁1.1【示例】:定义一个Car的类:public class Car {原创 2022-03-06 21:19:53 · 944 阅读 · 0 评论 -
@Lazy注解
懒加载@Lazy注解单实例Bean,默认在容器启动的时候创建对象。懒加载:容器启动不创建对象,第一次使用(获取)Bean创建对象,并初始化示例:在单例模式下,如果不加上@Lazy注解,则会在容器启动时创建对象@Configurationpublic class MainConfig2 { @Bean("book") public Book book() { System.out.println("向容器中添加book..."); retu原创 2022-02-27 22:13:59 · 2647 阅读 · 0 评论 -
@Conditional注解
作用满足Conditional指定的条件,则进行组件注入ConditionalOnBean:当容器中有Bean才注入ConditionalOnMissingBean:当容器中没有Bean才注入ConditionalOnClass:当容器中有Class才注入ConditionalOnMissingClass:当容器中没有Class才注入ConditionalOnResource:存在资源才注入…自定义条件需要实现Condition接口的matches方法public class原创 2022-02-27 22:10:36 · 251 阅读 · 0 评论 -
@Import及其相关注解
给注解中注册组件:a. 包扫描 + 组件标注(@Controller/@Service/@Repository/@Component),在自己写类一般使用b. @Bean[导入第三方组件]c. @Import[快速给容器导入组件]d. 使用Spring提供的工厂FactoryBean——默认获取的是工厂Bean调用getObject()创建的对象,在bean的名字前加上&可以获取到工厂Bean本身@Import注解作用@Import({Color.class, Red.class})原创 2022-02-27 22:09:06 · 251 阅读 · 0 评论 -
@Scope注解
1. 作用ConfigurableBeanFactory.SCOPE_PROTOTYPE:prototype——多实例,IOC容器启动不会调用方法创建对象,在获取时才会创建对象ConfigurableBeanFactory.SCOPE_SINGLETON:singleton——单实例(默认值),IOC启动就会调用方法将对象放入IOC容器中org.springframework.web.context.WebApplicationContext.SCOPE_REQUEST:request——同一次请求原创 2022-02-20 23:12:56 · 441 阅读 · 0 评论 -
@ComponentScan注解
1. 作用定义扫描的路径,从中找出标识了需要装配的类,自动将这些类装配到Spring的容器中。2. @ComponentScan注解详细作用下面这些注解:@Component@Repository@Service@Controller@Configuration查看它们的源码可以知道:都有一个共同的注解**@Component**,而**@ComponentScan**就会默认装配标识了上述注解的类到容器中。3. 源码解释@Retention(RetentionPolicy.RUN原创 2022-02-20 22:44:01 · 6135 阅读 · 0 评论 -
@SpringBootApplication自动装配原理
查看@SpringBootApplication源码,可以看到,主要由下面三个注解组成:@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan( excludeFilters = {@Filter( type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class}), @Filter( type = FilterType.CUSTOM,原创 2022-01-09 16:02:10 · 119 阅读 · 0 评论 -
SpringBoot默认包扫描
SpringBoot会自动扫描主程序所在包及其下面的所有子包里面的组件。下图中,controller包中的组件会被扫描,但是HelloController不会被扫描到。如果想扫描到HelloController,可以设置启动类的@SpringBootApplication(scanBasePackages="com.example")或者将@SpringBootApplication替换为下面三个注解:@SpringBootConfiguration@EnableAutoConfiguratio原创 2022-01-03 22:56:44 · 1805 阅读 · 0 评论 -
@Import注解
作用@Import({User.class})给容器中自动创建这两个类型的组件,默认组件的名称是全类名com.floweryu.example.config.bean.User原创 2022-01-03 22:56:12 · 193 阅读 · 0 评论 -
@Configuration注解
以前的spring是通过写xml文件来注入bean,现在springboot提供了更简单的方式注入bean.使用@Configuration标注在类上,相当于把该类作为spring的xml配置文件,作用为:配置spring容器(应用上下文)/** * @author Floweryu * @date 2022/1/3 19:29 * 这是一个配置类 */@Configuration public class MyConfig { /** * 向容器中添加组件,以方法原创 2022-01-03 22:55:45 · 326 阅读 · 0 评论 -
@ConfigurationProperties注解
使用方式1. @Component+@ConfigurationProperties需要实现set/get方法@ConfigurationProperties(prefix = "car")@Componentpublic class Car { private String name; private Integer price; private Pet pet; // standard getters and setters}2. @Enabl原创 2022-01-03 22:54:23 · 432 阅读 · 0 评论 -
SpringBoot自动装配
1. 什么是 SpringBoot 自动装配?SpringBoot 定义了一套接口规范,这套规范规定:SpringBoot 在启动时会扫描外部引用 jar 包中的META-INF/spring.factories文件,将文件中配置的类型信息加载到 Spring 容器(此处涉及到 JVM 类加载机制与 Spring 的容器知识),并执行类中定义的各种操作。对于外部 jar 来说,只需要按照 SpringBoot 定义的标准,就能将自己的功能装置进 SpringBoot。没有 Spring Boot 的转载 2021-06-04 09:18:14 · 5380 阅读 · 1 评论 -
Mybatis的$和#
${} 是 Properties ⽂件中的变量占位符,它可以⽤于标签属性值和 sql 内部,属于静态⽂本替换,⽐如${driver}会被静态替换为 com.mysql.jdbc.Driver 。#{} 是 sql 的参数占位符,Mybatis 会将 sql 中的 #{} 替换为?号,在 sql 执⾏前会使⽤ PreparedStatement 的参数设置⽅法,按序给 sql 的?号占位符设置参数值,⽐如 ps.setInt(0, parameterValue), #{item.name} 的取值⽅式为使.原创 2021-05-08 10:07:30 · 83 阅读 · 0 评论 -
Spring的事务隔离级别
TransactionDefinition 接⼝中定义了五个表示隔离级别的常量:TransactionDefinition.ISOLATION_DEFAULT: 使⽤后端数据库默认的隔离级别,Mysql 默认采⽤的 REPEATABLE_READ隔离级别 Oracle 默认采⽤的 READ_COMMITTED隔离级别.TransactionDefinition.ISOLATION_READ_UNCOMMITTED: 最低的隔离级别,允许读取 尚未提交的数据变更,可能会导致脏读、幻读或不可重复读原创 2021-05-08 09:56:22 · 260 阅读 · 0 评论 -
Spring中Bean的生命周期
Bean 容器找到配置⽂件中 Spring Bean 的定义。Bean 容器利⽤ Java Reflection API 创建⼀个Bean的实例。如果涉及到⼀些属性值 利⽤ set() ⽅法设置⼀些属性值。如果 Bean 实现了 BeanNameAware 接⼝,调⽤ setBeanName() ⽅法,传⼊Bean的名字。如果 Bean 实现了 BeanClassLoaderAware 接⼝,调⽤ setBeanClassLoader() ⽅法,传⼊ ClassLoader 对象的实例。与上⾯的.原创 2021-05-07 23:28:41 · 107 阅读 · 0 评论 -
@Component和@Bean的区别
作⽤对象不同: @Component 注解作⽤于类,⽽ @Bean 注解作⽤于⽅法@Component 通常是通过类路径扫描来⾃动侦测以及⾃动装配到Spring容器中(我们可以使 ⽤ @ComponentScan 注解定义要扫描的路径从中找出标识了需要装配的类⾃动装配到 Spring 的 bean 容器中)。 @Bean 注解通常是我们在标有该注解的⽅法中定义产⽣这个 bean, @Bean 告诉了Spring这是某个类的示例,当我需要⽤它的时候还给我。@Bean 注解⽐ Component 注解的⾃.原创 2021-05-07 23:21:56 · 1361 阅读 · 0 评论 -
将一个类声明为Bean的注解
⼀般使⽤ @Autowired 注解⾃动装配 bean,要想把类标识成可⽤于 @Autowired 注解⾃动 装配的 bean 的类,采⽤以下注解可实现:@Component :通⽤的注解,可标注任意类为 Spring 组件。如果⼀个Bean不知道属于哪 个层,可以使⽤ @Component 注解标注。@Repository : 对应持久层即 Dao 层,主要⽤于数据库相关操作。@Service : 对应服务层,主要涉及⼀些复杂的逻辑,需要⽤到 Dao层。@Controller : 对应 Spri原创 2021-05-07 23:21:24 · 847 阅读 · 0 评论 -
SpringBoot的IOC和AOP
1. IOC控制反转(IOC)和依赖注入(DI)是同一个概念,目的在于降低系统耦合,将类的实例化工作交给Spring代理,主要用到的设计模式为工厂模式,通过Java反射机制实现类的自动注入。IoC(Inverse of Control:控制反转)是⼀种设计思想,就是 将原本在程序中⼿动创建对象的控制 权,交由Spring框架来管理。 IoC 在其他语⾔中也有应⽤,并⾮ Spring 特有。 IoC 容器是 Spring ⽤来实现 IoC 的载体, IoC 容器实际上就是个Map(key,value),M原创 2021-05-07 23:14:36 · 2353 阅读 · 0 评论 -
SpringBoot种Bean的作用域scope
1.五种模式1.1 Singleton单例模式Spring默认的scope,表示Spring容器只创建一个bean的实例,Spring在创建第一次后会缓存起来,之后不再创建,就是设计模式中的单例模式。单例Bean优势减少了新生成实例的消耗减少jvm垃圾回收可以快速获取到bean单例Bean的劣势在并发环境下线程不安全?单例 bean 存在线 程问题,主要是因为当多个线程操作同⼀个对象的时候,对这个对象的⾮静态成员变量的写操作 会存在线程安全问题。常⻅的有两种解决办法:在Bea原创 2021-05-07 23:13:50 · 769 阅读 · 0 评论 -
Spring事务传播行为
1. 什么是事务传播行为事务传播行为用来描述由某一个事务传播行为修饰的方法被嵌套进另一个方法时事务如何传播。用伪代码说明: public void methodA(){ methodB(); //doSomething } @Transaction(Propagation=XXX) public void methodB(){ //doSomething }代码中methodA()方法嵌套调用了methodB()方法,methodB()的事务传播行为由@Tran转载 2021-03-20 14:37:07 · 180 阅读 · 0 评论 -
SpringBoot整合swagger使用
1. 添加依赖包<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version></dependency><dependency> <groupId>io.springfox</grou原创 2021-02-07 17:11:06 · 90 阅读 · 0 评论 -
记一次前后端分离项目的部署过程
最近刚完成一次课设,把一个前后端项目完整的部署到了线上,其中遇到的困难和部署的方法在这里记录一下!项目简介该项目是根据B站上一个音乐网站教程参考来的,之所以是参考是因为代码都是自己和同学重写的一边,项目结构、代码等都是按我们自己规定的标准来写。简单说就是只参考了这个网站的想法和使用了教程给的静态资源。完整的项目是完成一个音乐网站的前台和后台界面,以及所有后端。这里我们只选取了后台管理部分的编写,因为是课设,时间也不够。项目目录结构web-music music-manage // 后台管理.原创 2021-01-19 21:30:33 · 779 阅读 · 0 评论 -
SpringBoot的注解解释和积累
@Repository使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。原创 2020-12-31 12:04:26 · 94 阅读 · 0 评论 -
SpringBoot+Shiro+kaptcha验证码实现用户登录和根据角色跳转页面
这篇文章主要实现用户登录功能:用户输入自己的账号、密码以及验证码后,会进行身份验证,认证通过的系统会自动判断该用户的身份,跳转到不同的管理界面。要实现的功能用户登录判断根据用户角色自动跳转不同的页面加入验证码进行验证开发前的准备文件目录设置和连接数据库建立数据库在Navicat中建立一个数据库,并建立一张用户表(用来存储要登录的用户)用户登录主要用到下面这张user表,这里事先输入了用户名和密码(用于测试,到后面可以自己添加、修改等)。CREATE TABLE `user`.原创 2020-06-28 16:40:26 · 2232 阅读 · 1 评论 -
前言——项目整体的一些配置文件以及说明
这篇文章主要介绍项目的整体一些设置,避免在以后的开发过程中一点一点的配置项目的地址https://github.com/Pink-Smile/DatabaseDesign使用的技术栈SpringBoot 2.2.6前端UI:layui-2.x + X-admin2.2前后端数据传输:ajax + thymeleafJava版本:jdk1.8.0_251Maven版本:apache-maven-3.6.2Mybatis版本:Mybatis-2.0.0权限控制:Shiro下面是项目.原创 2020-06-28 16:56:59 · 285 阅读 · 0 评论 -
SpringBoot使用Shiro认证进行登录和权限管理
这篇文章设置了Shiro认证,结合上一篇文章的登录即可完成登录功能。起初引进Shiro的目的是为了实现权限控制,在本项目中就是不用用户拥有对库存管理的不同的权限,最后就整合了登录功能一起实现。文件目录ShiroConfig.java文件设置package pinksmile.database.config;import at.pollux.thymeleaf.shiro.dialect.ShiroDialect;import org.apache.shiro.spring.security.原创 2020-06-28 17:08:19 · 473 阅读 · 0 评论 -
SpringBoot根据时间查询数据库信息返回到前端
springboot + layui ,使用时间作为参数进行数据库的查询前端时间选择页面<div class="layui-inline layui-show-xs-block"><input class="layui-input" id="searchtime" name="searchtime" type="text" placeholder="请选择查询时间" autocomplete="off"></div><div cl.原创 2020-06-09 15:28:05 · 5239 阅读 · 3 评论 -
SpringBoot传递日期格式的数据到数据库时间少一天
经过一系列的排除,发现不是下面设置的问题,spring.jackson.date-format=yyyy-MM-ddspring.jackson.time-zone=GMT+8因为时间从前台传递到后端数据一样,是从后台传到数据库有误。所以是mysql时区的问题,刚开始我设置的时区是serverTimezone=UTC把它改成serverTimezone=GMT%2B8就行了,也就是GMT+8时区spring.datasource.url=jdbc:mysql://localhost:3306/原创 2020-05-28 10:47:26 · 1319 阅读 · 0 评论 -
SpringBoot用Thymeleaf显示数据库时间到前台页面
springboot + thymeleaf + mybatis 显示mysql里面的时间到前台页面首先在 mapper.xml中对实体类进行映射:<result column="datetime" javaType="Date" jdbcType="DATE" property="datetime"/>这里数据库中的时间格式我用的是Date,因为我只需要显示年月日就行了。在实体类中对时间字段添加注解:@DateTimeFormat(pattern="yyyy-MM-dd.原创 2020-06-09 15:28:22 · 1880 阅读 · 0 评论 -
SpringBoot静态资源CSS等修改后再运行无效问题
问题背景在美化网页过程中,修改好CSS后在本地已经可以显示出我想要的效果了。于是就把修改好后的css加载到springboot中运行,结果问题出现了:我修改后的css样式始终不能加载!打开F12看到css样式成功的被请求,然后再进一步点进去看css文件,发现我修改的部分并没有加载,现在用的css还是我修改以前的css。这里我注意到一个细节,然后才明白是怎么回事原来spring boot会把静态文件缓存到浏览器本地。但这样就造成了一个问题:如果服务器静态文件修改,浏览器端在未过期之前是不会重新加载文原创 2020-06-09 15:28:42 · 2303 阅读 · 0 评论 -
解决SpringBoot运行时网页二级菜单被遮挡的问题
本文章记录的是我开发过程中遇到的问题,仅供参考我使用的是xadmin模板,修改好xadmin.css中关于背景图的样式后,在本地打开后二级菜单显示一切都很正常。但是,当我运行到springboot中后,鼠标指向二级菜单后被背景图片遮挡在最下方。这个问题让我很不理解?为什么本地和springboot运行结果会有差异?以后有待深究。现附上一篇讲解z-index的文章链接:https://www.cnblogs.com/ForEvErNoME/p/3373641.html对于这个层级叠加:于是上网搜索原创 2020-06-09 15:28:58 · 451 阅读 · 0 评论 -
SpringBoot:实现用户根据角色登录不同的页面
本文记录用SpringBoot 实现简单的用户登录过程,对于初步入门的我来说遇到了很多的困难,所以在实现登录后特写此篇文章。描述我在实现过程中遇到的问题和疑惑,也算是自己的学习笔记吧!!开发环境:IDE:JetBrains Intelij IDEAJava:JavaSE13详细过程:文件目录:【domain】目录主要用于实体(Entity)与数据访问层(Repository...原创 2020-06-09 15:29:20 · 35143 阅读 · 10 评论