首页 > 分享 > Spring

Spring

sprint重要类

在这里插入图片描述

bean对象的生命周期

(1)通过构造器创建 bean 实例(无参数构造
(2)为 bean 的属性设置值和对其他 bean 引用(调用 set 方法
(3)把 bean 实例传递 bean 后置处理器的方法 postProcessBeforeInitialization
(4)调用 bean 的初始化的方法(需要进行配置初始化的方法
(5)把 bean 实例传递实例传递 bean 后置处理器的方法 postProcessAfterInitialization
(6)bean 可以使用了(对象获取到了)
(7)当容器关闭时候,调用 bean 的销毁的方法(需要进行配置销毁的方法

在这里插入图片描述
在这里插入图片描述

SpringBoot杂记

IOC就是个存放对象的容器(就是spring拿IOC容器去管理对象),所以我们需要将创建的对象添加进IOC容器,让spring对对象进行管理 【添加进IOC就不叫对象了,叫做组件】将对象添加进IOC方法
bean.xml中<bean>;
config文件中@Bean;(组件id默认为方法名,或@Bean(“tom”))
GenericApplicationContext 对象.registerBean(“user1”,User.class,() -> new User())
配置文件(@Configuration)也是个组件(类名)@Component等添加组件(对象),还要给web.xml中申明扫描包啊组件默认创建对象为单实例配置文件的proxyBeanMethods = true属性保证容器组件单实例条件装配@Conditionalxxxxxx:当容器中存在或不存在对象、类…才执行底下的操作
application.properties就是利用条件装配用户直接自己在配置文件中@Bean替换底层的组件给静态资源访问路径配置前缀spring: mvc: static-path-pattern: /res/** 即会让欢迎页失效,也会让网页图标favicon.ico失效表单提交行为判断:

10. 开启隐藏方式过滤器【页面表单的Rest功能】 spring: mvc: hiddenmethod: filter: enabled: true 123456

11. 隐藏方式名默认为_method【表单提交方式必须为post】 <form action="/user" method="post"><!--更新--> <input type="hidden" name="_method" value="PUT"> </form> <!--删除--> <input type="hidden" name="_method" value="DELETE"> <!--GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE;--> # get/post请求就不用隐藏一个input了,直接form的method的 123456789

注意:请求返回的几种方式 (直接return就相当于forward)

@ResponseBody @GetMapping("/user") public String get(){ return "<h1>hello world<h1>"; } @PostMapping("/user") public String post(){ return "user/login";//转发到项目user文件下的login.html页面 } @PutMapping("/user") public String update(){ return "forward:user/login";//转发到项目user文件下的login.html页面【带上request和response】 } @DeleteMapping("/user") public String delete(){ return "redirect:user/login";//重定向到项目user文件下的login.html页面 }

1234567891011121314151617 请求复杂参数:Map、Model(map、model里面的数据会被放在request的请求域 request.setAttribute)自定义对象参数可以级联封装:(当然前端的属性名必须和后端对象属性名相同!!)

/** * 姓名: <input name="userName"/> <br/> * 年龄: <input name="age"/> <br/> * 生日: <input name="birth"/> <br/> * 宠物姓名:<input name="pet.name"/><br/> * 宠物年龄:<input name="pet.age"/> */ @Data public class Person { private String userName; private Integer age; private Date birth; private Pet pet; } @Data public class Pet { private String name; private String age; } //servlet直接获取自定义对象 @PostMapping("/user") public void post(Person person){ ...... }

123456789101112131415161718192021222324252627282930 返回参数类型人为协商模式(不由浏览器的Accept控制)

服务器端开启format变量协商参数模式: spring: contentnegotiation: favor-parameter: true #开启请求参数内容协商模式 1234

客户端可携带format变量表达想要返回的数据类型【注意 只能声明这两种!!!】 http://....../test/person?format=json http://....../test/person?format=xml 123 Thymeleaf:
标签中添加文本[[${user.username}]]
连接中参数取值:th:herf="@{/user/delete/{id}(id=${user.id})}"注意拦截器路径所有是双** 【拦截器实现:HandlerInterceptor接口的三个方法】(原生Spring是单*

/** * 1、编写一个拦截器实现HandlerInterceptor接口 * 2、拦截器注册到容器中(实现WebMvcConfigurer的addInterceptors) * 3、指定拦截规则【如果是拦截所有,静态资源也会被拦截】 */ @Configuration public class AdminWebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginInterceptor()) .addPathPatterns("/**") //所有请求都被拦截包括静态资源 .excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/js/**"); //放行的请求 } } 123456789101112131415 SpringBoot中所有位置 / 都表示当前项目下!!Thymeleaf模板必须post,且enctype=“multipart/form-data”

@RequestPart("headerImg") MultipartFile headerImg 1 error/下的4xx,5xx页面会被自动解析;
在这里插入图片描述
返回的json对象属性会存在request域中:
在这里插入图片描述

<h1 th:text="${status}">5xx</h1> <h2 th:text="${error}">OOOPS!!!</h2> <h3 th:text="${message}">Something went wrong.</h3> <h3 th:text="${trace}">栈跟踪信息</h3> 1234

SpringBoot配置druid

favicon.ico 放在静态资源目录下即可

重定向可以传参数啊啊啊啊!!!
在这里插入图片描述

从容器中自动装配属性的注释
@Autowired :根据类型
@Qualifier :根据属性名
@Resource建议!!! :属性+类型
@Value :直接注入值

注入方式:
在这里插入图片描述

面向接口编程,多态实现方法:不用将接口注入到容器(接口都没构造方法,注入个锤子),需要的是将其实现类注入到容器中!
面相抽象编程(多态编程):@Autowired 接口
获取的是容器中接口的实现类!

SpringBoot2.x自动整合 org.junit.jupiter.api.Test 的Junit5,常用注解:
@SpringBootTest 让测试代码能使用Spring容器
@Test :表示方法是测试方法。但是与JUnit4的@Test不同,他的职责非常单一不能声明任何属性,拓展的测试将会由Jupiter提供额外测试
@ParameterizedTest :表示方法是参数化测试,下方会有详细介绍
@RepeatedTest :表示方法可重复执行,下方会有详细介绍
@DisplayName :为测试类或者测试方法设置展示名称
@BeforeEach :表示在每个单元测试之前执行
@AfterEach :表示在每个单元测试之后执行

@BeforeAll :表示在所有单元测试之前执行
@AfterAll :表示在所有单元测试之后执行
@Tag :表示单元测试类别,类似于JUnit4中的@Categories
@Disabled :表示测试类或测试方法不执行,类似于JUnit4中的@Ignore
@Timeout :表示测试方法运行如果超过了指定时间将会返回错误
@ExtendWith :为测试类或测试方法提供扩展类引用
@ParameterizedTest参数化测试

断言org.junit.jupiter.api.Assertions 的静态方法:
在这里插入图片描述

指标监控

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 1234

management: endpoints: enabled-by-default: true #暴露所有端点信息 web: exposure: include: '*' #以web方式暴露 123456

测试:http://localhost:8080/actuator/**

SpringBoot监控组件SpringBoot Admin项目中使用Integer等包装类,别直接使用基本数据类型!!!参数注解:value:属性名;required:是否必须控制层接收对象参数使用的是对象的无参构造和set方法返回json数组

@PostMapping("/getUser") @ResponseBody public List<User> getUsers(){ ...... return list; } 123456

直接使用@Resource变量上装配!!!(@Autowired默认是按照类型装配注入,@Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入。)

更好的使用SpringBoot: (条理要清楚)
在这里插入图片描述

insert、update…语句返回int: (返回影响行数)

/** * 注册用户 */ @Insert("insert into user(phone,user_name,birth_date,gender,email,header_img)" + "values(#{phone},#{userName},#{birthDate},#{gender},#{email},#{headerImg})") @Options(useGeneratedKeys = true,keyProperty = "userId",keyColumn = "user_id") int insertUser(User user); 1234567 控制层对结果进行判断,业务层对请求进行判断!Servlet是单 *,Spring是双 **拦截器、过滤器按照声明顺序执行SpringBoot的web的starter就包含了SpringMVC容器和Servlet容器单个不重要的参数直接使用路径参数@PathVariable获取单个参数就不要使用整个对象作为参数获取会传递了!!!多模块下只需要在程序入口类对应的模块中添加打包插件!!!从配置文件中注入属性值:

@Configuration #必须是SpringBoot的组件啊 才能用SpringBoot的配置文件 public class SmsConfig { @Value("${spring.redis.sms.access-key-id}") private String accessKeyId;...... } 1234567 从配置文件中注入静态属性值: ★★★★★★
注意:属性为静态变量,spring无法直接注入值,不过通过set方法的方式可以注入依赖
(PS:注set方法不能是静态方法,且不能用lombok生成,可以通过IDE手动创建)
(lombok给静态属性生成的就是静态set方法)
静态属性从配置文件中注入值只能是:@ConfigurationProperties + 非静态set方法

@Component @ConfigurationProperties(prefix = "jwt") public class JWTUtils { // 令牌自定义标识 private static String header; public void setHeader(String header) { JWTUtils.header = header; } ...... } 1234567891011

相关知识

Spring
Spring Boot宠物医院管理系统设计与实现
Spring Boot宠物购物商城网站系统设计与实现
构建便捷高效的宠物医疗预约服务平台:基于Spring Boot的实现本文介绍了基于Spring Boot的宠物医疗预约服
构建便捷高效的宠物医疗预约服务平台:基于Spring Boo
基于Spring Boot的宠物咖啡馆平台的设计与实现
构建便捷高效的宠物医疗预约服务平台:基于Spring Boot的实现
基于Spring Boot的宠物寄养服务系统的设计(源码+文档+调试)
基于spring boot和vue的宠物相亲网站的设计与实现
Bob Martin 宠物卫生护理用品品牌春天spring系列包装设计

网址: Spring https://m.mcbbbk.com/newsview235909.html

所属分类:萌宠日常
上一篇: 狗用可注射宠物 ID 动物追踪芯
下一篇: 设置猫奖励标志,宠物携带情况和项