JAVA Spring学习Day1
Maven
Maven配置:
Maven是Java项目的构建工具,使用pom.xml配置文件管理项目依赖、插件和构建目标。
Spring Boot项目搭建:
Spring Boot是基于Spring框架的快速开发框架,通过约定大于配置的理念简化了Spring应用的搭建和开发。
Spring
项目启动:
package com.easy;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class EasySpringAApplication {//项目启动类//运行起该类就运行了整个项目public static void main(String[] args) {SpringApplication.run(EasySpringAApplication.class,args);}
}
Spring核心概念
IOC控制反转:
控制反转是Spring的核心,它通过依赖注入(DI)实现,将对象的创建和管理交由Spring容器负责,降低了组件之间的耦合度。Spring提供了IOC的方式,方便获取该对象。容器和代码之间的控制权反转,代码中不需要明文调用方法来得到对象,只需要声明该类需要什么类型的对象即可。
package com.easy.service;import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;@Service
public class EasyService {//Spring IOC//管理项目中java bean的生命周期//在项目运行阶段,程序中需要很多的对象来完成整体的业务//springboot提供了很多注解标注类,//@Controller @RestController(访问层) @Repository(Dao数据访问) @Component(其他功能类) @Bean @Service(业务类)//让spring管理这些类的对象的生命周期//Spring提供了IOC的方式,方便获取该对象//IOC==控制反转//容器和代码之间的控制权反转,代码中不需要明文调用方法来得到对象,只需要声明该类需要什么类型的对象即可//@Service注解是不能代替@Controller@RequestMapping("easyaa")public String easyaa(){return "this is aa";}//访问不到404}
DI依赖注入:
依赖注入是IOC的具体实现方式,通过注入对象所需的依赖关系,实现了组件之间的解耦和灵活性。
package com.easy.controller;import com.easy.common.TestA;
import com.easy.service.EasyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class EasyController {//该类中需要EasyService类的对象//在这个类中只需要声明我们依赖EasyService这个类就可以,不需要代码主动获取EasyService类的对象//依赖注入(DI),通过识别依赖关系,注入对应的对象@AutowiredEasyService easyS;@AutowiredTestA testa;@RequestMapping("testb")public String testB(){testa.test();return "easy method";}@RequestMapping("easya")public String easya(){System.out.println(easyS);return "new Service";}@RequestMapping("hello")public String hello(){return "java so easy";}
}
注解
常用注解:
@Controller:
用于标识控制层组件,处理HTTP请求,返回响应结果。
@RestController:
结合了@Controller和@ResponseBody,用于RESTful风格的控制器,返回JSON数据。
@Service:
标识业务逻辑层组件,通常用于注解业务类。
@Repository:
标识数据访问层组件,通常用于注解DAO类。
@Component:
泛指Spring容器管理的组件,可以用于任何Spring管理的Bean。
@Bean:
用于定义Spring Bean,通常用于配置类中,将方法返回的对象注册为Spring容器的Bean。
@Configuration:
用于定义配置类,替代XML配置文件,其中包含@Bean注解的方法用于定义Bean。
SpringBean
SpringBean作用域:
Singleton:单例模式,一个Spring容器只存在一个实例。
Prototype:每次请求(或注入)时创建一个新实例。
Request:每个HTTP请求创建一个实例(仅在Web环境中有效)。
Session:每次会话都会创建一个新的对象。
GlobalSession:每个全局HTTP Session创建一个实例。
SpringBean的生命周期:
1)根据配置情况调用 Bean 构造方法或工厂方法实例化 Bean。
public EasyBean(){System.out.println("1------构造方法");}
2)利用依赖注入完成 Bean 中所有属性值的配置注入。
TestA testa;@Autowiredpublic void setTesta(TestA testa){System.out.println("2------注入属性");this.testa=testa;}
3) 如果 Bean 实现了 BeanNameAware 接口,则 Spring 调用 Bean 的 setBeanName() 方法传入当前 Bean 的 id 值。(叫什么名字)
@Overridepublic void setBeanName(String name) {System.out.println("3------BeanNameAware接口的setBeanName方法"+name);}
4)如果 Bean 实现了 BeanFactoryAware 接口,则 Spring 调用 setBeanFactory() 方法传入当前工厂实例的引用。(哪个工厂创建的)
@Overridepublic void setBeanFactory(BeanFactory beanFactory) throws BeansException {System.out.println("4------BeanFactoryAware接口的setBeanFactory方法"+beanFactory);}
5) 当一个 Bean 实现了 ApplicationContextAware 接口并在 Spring 容器中被实例化时,Spring 容器会自动调用该 Bean 的 setApplicationContext 方法,并将应用程序上下文ApplicationContext作为参数传递进来。(创建的对象在哪个项目下)
@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {System.out.println("5------ApplicationContext接口的setBeanFactory方法"+applicationContext);}
6)BeanPostProcessor 是 Spring 框架中的一个重要接口,它允许开发者在 Spring 容器创建和初始化 bean 的过程中,对 bean 进行自定义处理。这包括在 bean 实例化之后、属性设置之前(postProcessBeforeInitialization 方法),以及在 bean 初始化之后(postProcessAfterInitialization 方法)执行自定义逻辑。
Spring 容器在创建和初始化每一个 bean 时,都会调用 CustomBeanPostProcessor 中的这两个方法,允许你进行自定义处理。(初始化的处理器,before之前是实例化和after之前是初始化)
@Component
public class EasyBeanProcessor implements BeanPostProcessor {@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {if(beanName.equals("easyBean")){System.out.println("6-----"+beanName+" applicationContext的Before方法");}return null;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {if(beanName.equals("easyBean")){System.out.println("9-----"+beanName+" applicationContext的After方法");}return null;}
}
7)InitializingBean 是 Spring 框架中的一个接口,它定义了一个 afterPropertiesSet 方法。当 Spring 容器创建 bean 的所有属性都被设置完成后,会调用这个方法。(初始化Bean的接口)
@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("7------InitializingBean接口的afterPropertiesSet方法");}
8)如果在配置文件中通过 init-method 属性指定了初始化方法,则调用该初始化方法。(初始化方法)
public void init(){System.out.println("8------initMethod");}
如果 Bean 实现了 DisposableBean 接口,则 Spring 会调用 destory() 方法将 Spring 中的 Bean 销毁;如果在配置文件中通过 destory-method 属性指定了 Bean 的销毁方法,则 Spring 将调用该方法对 Bean 进行销毁。
@Overridepublic void destroy() throws Exception {System.out.println("easybean被回收了");}
运行结果:
了解springbean生命周期的必要性
pring Bean的生命周期定义了从bean的创建、初始化到销毁的一系列过程,以及在这些过程中Spring容器如何与bean进行交互
自定义初始化逻辑:
通过了解Spring Bean的生命周期,你可以知道何时是执行自定义初始化逻辑的最佳时机。例如,你可能需要在bean的依赖项注入之后立即进行某些设置或启动某些服务。通过使用@PostConstruct注解或者init-method属性,你可以确保这些初始化逻辑在bean的依赖项注入之后执行。
自定义销毁逻辑:
同样地,当bean不再需要时,你可能需要执行一些清理操作,如关闭资源连接、释放内存等。通过了解Spring Bean的生命周期,你可以知道何时是执行这些销毁逻辑的最佳时机。你可以通过实现DisposableBean接口或使用@PreDestroy注解来定义自定义的销毁方法。
集成第三方库:
当与第三方库集成时,这些库可能需要在特定的生命周期阶段执行特定的操作。了解Spring Bean的生命周期可以帮助你确定在何处集成这些库,以确保它们能够正常工作。
性能优化:
通过了解Spring Bean的生命周期,你可以更好地优化你的应用程序的性能。例如,如果你知道某个bean只在特定的请求期间需要,你可以考虑将其声明为作用域为request的bean,这样Spring就不会在整个应用程序的生命周期内都持有它的实例。
调试和排错:
当应用程序出现问题时,了解Spring Bean的生命周期可以帮助你更快地定位问题。例如,如果你知道某个bean的初始化方法总是被调用,但某些属性没有被正确设置,那么你可以检查这个初始化方法是否有问题,或者检查是否有其他bean在初始化方法之后修改了这些属性。
更好的设计决策:
了解Spring Bean的生命周期可以帮助你做出更好的设计决策。例如,你可能需要考虑是否将某个功能拆分为多个bean,以及这些bean应该如何相互协作。通过了解生命周期,你可以确定哪些bean应该在其他bean之前或之后创建和销毁。
相关文章:
JAVA Spring学习Day1
Maven Maven配置: Maven是Java项目的构建工具,使用pom.xml配置文件管理项目依赖、插件和构建目标。Spring Boot项目搭建: Spring Boot是基于Spring框架的快速开发框架,通过约定大于配置的理念简化了Spring应用的搭建和开发。 …...
linux常见面试题(三)
18 什么事SQL注入 由于程序员的水平及经验参差不齐,大部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断。 应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据…...
【JS】ES6新类型Map与Set
一、Map Map 对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值)都可以作为键或值。 描述 Map 对象是键值对的集合。Map 中的一个键只能出现一次;它在 Map 的集合中是独一无二的。 Map 对象按键值对迭代——…...
FETCH FIRST ROW ONLY和 DISTINCT ON和 LIMIT 1的用法
以下是 PostgreSQL 中函数 FETCH FIRST ROW ONLY、DISTINCT ON 和 LIMIT 1 的用法、含义、例子以及适用版本的信息总结: FETCH FIRST ROW ONLY 用法和含义 FETCH FIRST ROW ONLY 用于限制查询结果集,只返回第一行。它可以和 ORDER BY 子句一起使用&am…...
前端小白安装node、vue、Express、Electron及(Electron桌面端exe应用开发)
一、node.js (一)、下载 下载地址 Node.js — 在任何地方运行 JavaScript (nodejs.org) 参考文章:Node.js安装及环境配置超详细教程【Windows系统】_windows 安装nodejs-CSDN博客 (二)、安装 安装路径可以更换&a…...
solidity多态【很重要】
多态是面向对象编程(OOP)的一个核心概念,允许不同类的对象被视为同一类型的实例,并根据实际类型来响应相同的方法调用。 这意味着同一个接口可以用来引用属于不同类的对象,而这些对象可以有自己的方法实现,…...
Jangow-1.0.1靶机漏洞复现(未完成)
首先,这个靶机只能使用VirtualBox打开,靶机下载地址为 https://download.vulnhub.com/jangow/jangow-01-1.0.1.ova 虚拟机软件下载地址为 Download_Old_Builds – Oracle VM VirtualBox 开启靶机后访问ip进入如下页面,点击site进入到一个…...
软件测试--python基础
一、python基础 (1)第一个python (2)python解释器 (3)基础语法 ①字面量 什么是字面量 常用的值类型 字符串 ②注释 ③变量 什么是变量 变量的特征 变量的目的是存储运行过程的数据 存储的目的是为了:重复使用 ④数据类型 type()语句 变量有类型吗?…...
GPIO子系统
1. GPIO子系统视频概述 1.1 GPIO子系统的作用 芯片内部有很多引脚,这些引脚可以接到GPIO模块,也可以接到I2C等模块。 通过Pinctrl子系统来选择引脚的功能(mux function)、配置引脚: 当一个引脚被复用为GPIO功能时,我们可以去设…...
学会这个Python库,接口测试so easy
前言 我们在做接口测试时,大多数返回的都是json属性,我们需要通过接口返回的json提取出来对应的值,然后进行做断言或者提取想要的值供下一个接口进行使用。 但是如果返回的json数据嵌套了很多层,通过查找需要的词,就…...
Stable Diffusion4.8.7(Ai绘画)软件安装教程
软件下载 [名称]:Stable Diffusion4.8.7(Ai绘画) [大小]:16.52GB [语言]:简体中文 [安装环境]:Win11/Win10/Win8/Win7 [硬件要求]:CPU2.0GHz ,内存4G(或更高&#x…...
操作系统错误处理
错误处理 1、通过函数的返回值表示执行错误: // 返回合法值表示成功 返回非法值表示失败 // 计算大小、查找 long file_size(const char* path) {FILE* fp fopen(path,"r");if(NULL fp)return -1; // 返回非法值fseek(fp,SEEK_END,0);long size …...
【靶场实操】sql-labs通关详解----第一节:基础注入方式(Less-1~Less-10)
目录 一、注入方式简要概括 1.1 SQL常见注入方式 1.2 爆破函数 二、靶场实操 2.1 Less-1 2.1.1 判断类型 2.1.2 联合注入查询 2.2 Less-2 2.2.1 判断类型 2.2.2 注入攻击 2.2.3 字符型与数字型漏洞对比 2.3 Less-3 2.3.1 判断 2.3.2 注入 2.4 Less-4 2.4.1 判断…...
力扣676.实现一个魔法字典
力扣676.实现一个魔法字典 字典树 dfs class Trie{public:Trie* next[26];bool is_end false;};class MagicDictionary {public:Trie* root new Trie();void add(string& word){Trie* p root;for(char c:word){if(p->next[c-a] NULL) p->next[c-a] new Trie…...
ctfshow-web入门-sql注入(web171-web175)
目录 1、web171 2、web172 3、web173 4、web174 5、web175 1、web171 单引号测一下,报错 -- 闭合后回显正常 也可以用 # ,不过需要 URL 编码 成功闭合之后,先判断下字段数: 1 order by 3-- 3 的时候正常 4 的时候报错&am…...
视频怎么添加音乐?分享5种视频添加音乐方法
在如今火爆的短视频时代,为视频添加合适的背景音乐,无疑是让其脱颖而出的关键一步。无论是打造个人Vlog、纪录片,还是创意短片,音乐都能赋予视频独特的情感与氛围。那么怎么给视频添加上背景音乐呢?给大家分享5种简单的…...
黑马JavaWeb后端案例开发(包含所有知识点!!!)
目录 1.准备工作 环境搭建 开发规范 REST(REpresentation State Transfer),表述性状态转换,它是一种软件架构风格 注意事项 统一响应结果 2.部门管理功能 查询部门 删除部门 新增部门 RequestMapping 3.员工管理功能 分页查询 批…...
FPGA开发——蜂鸣器实现音乐播放器的设计
一、概述 我们在进行蜂鸣器的学习的时候,总会在想既然蜂鸣器能够发出声音,那么它能够播放音乐吗,今天这篇我们文章我们就一起来学习怎样使用使用蜂鸣器来播放音乐,也就是怎样成为一个音乐播放器。 1、蜂鸣器的类型 在设计的时候…...
InnoDB存储引擎(1)
InnoDB存储引擎的优点 InnoDB在设计时考虑到了处理大数据量时的性能,支持事务,回滚和崩溃修复的能力,通过多版本并发控制来减少锁定(降低了锁的争用),同时还支持外键的约束;通过缓冲池在内存中缓存数据来提高查询的性能ÿ…...
VMWare虚拟机共享主机的网络访问外网
1.主机中启动客户端并连接外网 2.设置虚拟网络类型为NAT 3.启动虚拟并通过主机访问外网...
LeetCode Easy|【415. 字符串相加】
力扣题目链接 题目本身难度不大,但是后续的一些补充内容还是值得搞清楚的 主要的逻辑如下: 其实本题的目的就是让我们来模拟我们的竖式加法。所以很直观的一个想法就是使用双指针:分别指向两个 num 的末尾。随后就会产生一些问题:…...
RAG 革命:NVIDIA 工作站如何成为企业 AI 的秘密武器
在深圳的一家科技初创公司,首席技术官李梅正在向她的团队展示一个令人兴奋的新项目。“看这个,” 她指着屏幕上的实时演示说,“我们刚刚用公司的技术文档训练了一个 AI 助手,它现在可以回答任何关于我们产品的问题,而且…...
九大原则,轻松构建个人高效SOP
1、原则一、工作汇报SOP SCQA模型(升职加薪的关键!) 清晰定义问题和提出解决方案 类别 关键词 解读 S - Situation 情景 陈述项目背景,目标,愿景 C - Complication 冲突 讲卡点,讲冲突 Q - Question 疑问-问题 这些冲…...
Airtest的demo实现多设备并行
Airtest的demo实现多设备并行 它实现是的获取adb连接上的所有设备,然后在每一台设备上跑给定的测试用例,跑完之后生成单机的测试报告,最后再汇总这些单机测试报告的结果,形成汇总(聚合)报告: 同…...
社区养老服务小程序的设计
管理员账户功能包括:系统首页,个人中心,用户管理,服务人员管理,服务产品管理,服务预约管理,服务状态管理,服务退订管理,活动管理,视频管理 微信端账号功能包…...
Interceptor拦截器开发
因为1登录后的接口都需要token验证代码,会出现重复代码;2当前的接口不防刷,会被恶意攻击 所以在controller层增加请求拦截,如果你的token不合法,就不让你做后续的处理了 拦截器的作用是什么 作用: 1、对controller层代码的访问进行拦截,合法的请求,那此层代码就处理,反…...
美团 AIGC产品经理面经(已拿 offer)
背景:211本科毕业,毕业之后在北京一家中型电商公司做了3年商家后台产品经理,目前通过老薛的朋友关系拿到了美团的offer。 目前还有几家在面试流程中,继续加油💪 美团AIGC产品面经-业务面 💥1、自我介绍&a…...
@RequestBody与@RequestParam
RequestBody会将请求体中的数据,转换成对象.最主要的是RequestBody就是要返回Json的字符串!!! RequestParam会从http请求查询参数中提取数据! RequestParam和RequestBody是Spring Framework中用于处理HTTP请求的注解…...
vmware上,虚机经常丢失网卡。导致无法上网。
1、winR 输入 services.msc 2、重启这两个服务。 VMware NAT service和VMware DHCP service...
git 鉴权失败
这条错误信息通常出现在使用Git进行远程操作时,比如克隆仓库、拉取更新或推送代码。错误的含义是: HTTP Basic: Access denied:访问被拒绝。The provided password or token is incorrect:提供的密码或令牌不正确。Your account …...
网站没有被百度收录/自动发外链工具
天玑800u采用7nm工艺打造, CPU由两颗2.4GHz的A76和6颗2.0GHz的Cortex-A55组成, GPU集成Mali-G57,独立APU,支持最高LPDDR4X-2133内存、UFS 2.1闪存等。 选天玑810还是天玑800u哪个强这些点很重要 http://www.adiannao.cn/7 天玑810 作为天玑8系列的新成员,天玑810比较…...
济南微网站建设/阳山网站seo
为什么80%的码农都做不了架构师?>>> package com.dy.pool;import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;/*** 在Executors类里面提供了一些静态工厂,生成一些常用的线程池。* 1. newSingleThreadEx…...
万网制作网站吗/品牌seo是什么
略...
网站建设网页设计培训班/搜索引擎优化关键词的处理
欢迎关注”生信修炼手册”!mutagene是一个肿瘤突变频谱数据库,从ICGA, TCGA等肿瘤项目中收集整理蛋白编码基因上的体细胞突变数据,分析识别对应的突变频谱,对应的文章发表在Nucleic Acids Research,链接如下https://academic.oup.com/nar/art…...
网站栏目内容/武汉谷歌seo
题库来源:安全生产模拟考试一点通公众号小程序 2022低压电工考试题是低压电工题库上机考试练习题!2022年低压电工考试试题模拟考试平台操作依据低压电工考前押题。低压电工练习题通过安全生产模拟考试一点通模拟在线真实考试。 1、【单选题】( )仪表由固…...
武汉营销类网站设计/沈阳百度seo排名优化软件
通过Nopi实现对execl的操作 nopi是一个第三方的组建,使用前必须应用该组件,请自行下载 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;us…...