【Java EE】----Spring框架创建和使用

1.Spring框架创建

  • 创建一个maven项目

  • 添加Spring框架支持
<dependencies>
上下文<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.3.RELEASE</version></dependency>
Bean对象<dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.2.3.RELEASE</version></dependency></dependencies>
  • 创建普通类和main方法来运行spring框架 

2.存储Bean对象 

  • 创建Bean对象

  • 将创建的bean注册到spring当中(在xml里面进行实现的)
  1. 在resources里面配置⽂件 spring-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"></beans>
  1. 在配置文件里面去把Bean注册到spring里面

 3.获取Bean对象

  • 对象交给Spring去管理,先得到Spring上下文对象
  1. 通过ApplicationContext来获取Spring上下文
ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");

     2.通过BeanFactoryContext来获取Spring上下文

BeanFactory context=new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
面试题:ApplicationContext和BeanFactoryde的区别?相同:都可以得到Spring上下文对象;都来自Spring顶级接口不同:继承关系和功能⽅⾯来说: ApplicationContext属于 BeanFactory 的⼦类,它除了继承了 BeanFactory 的所有功能之外,它还拥有独特的特性,还添加了对国际化⽀持、资源访问⽀持、以及事件传播等⽅⾯的⽀持。从性能⽅⾯来说:ApplicationContext 是⼀次性加载并初始化所有的 Bean 对象,⽽BeanFactory 是需要那个才去加载那个,因此更加轻量。
  • 通过Spring上下文,获取某一个指定的Bean对象
 User user = (User) context.getBean("user");  这里的id需要与配置文件的id对应
 根据类型来获取Bean对象User user=context.getBean(User.class);

  当有⼀个类型被重复注册到 spring-config.xml 中时,只能使⽤根据名称获取了

 根据创建的Bean名称和类型来获取
User user=context.getBean("user",User.class);
  • 使用Bean对象
public class App {public static void main(String[] args) {//得到Spring对象上下文//ApplicationContext context=new ClassPathXmlApplicationContext("spring-config");BeanFactory context=new XmlBeanFactory(new ClassPathResource("spring-config.xml"));//加载某个Bean对象User user = (User) context.getBean("user");//使用Bean对象(可选)System.out.println(user.sayhi());}}

4.Spring更简单的读和取

  • 配置扫描路径,只有被配置的包下的所有类,添加了注解才能被保存在Spring中
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:content="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><content:component-scan base-package="com.bit.service"></content:component-scan>
</beans>   扫描的根路径
  • 注意:如果没有设置包,所有的类都写在java根路径下,需要使用**来扫描本目录路径
 <content:component-scan base-package="**"></content:component-scan>  扫描的根路径

  • 添加注解存储Bean对象
1. 类注解:@Controller、@Service、@Repository、@Component、@Configuration。
2. ⽅法注解:@Bean
  1. @controller控制器

  1. @Service服务存储

  1. @Repository 仓库存储

  1. @Component组件存储

  1. @Configuration配置存储

这些注解⾥⾯都有⼀个注解 @Component,本身就是属于 @Component 的“⼦类”

5.Bean的读取

通常我们 bean 使⽤的都是标准的⼤驼峰命名,⽽读取的时候⾸字⺟⼩ 写就可以获取到 bean 

  • 注意:
  1. 当Bean对象的类名首字母小写,和首字母大写获取方式一样,类名首字母小写
  2. 当Bean对象的类名的第一个和第二个字母都大写,使用原类名

 6.5大注解有什么关系?为什么需要5个类注解?(面试)

  • @Controller(控制器):归属于业务逻辑,用来控制用户的行为,它用来检查用户参数有效性
  • @Service(服务层):归属于服务层,调用持久化类来实现相应的功能,不是直接和数据库交互,类似于控制中心
  • @Repository(仓库):归属于持久层,直接和数据库交互,每个表都会对应一个Repository
  • @Configuration(配置层):用来配置当前项目一些信息
  • @Component(组件):归属于公共工具类,提供某些公共方法

这些注解⾥⾯都有⼀个注解 @Component,本身就是属于 @Component 的“⼦类”

7.方法注解Bean 

  • 重命名Bean(支持设置name属性,因为方法名是可以重复的,可能会导致获取的Bean对象不知道是哪个)给Bean设置name属性,原方法名就不可以在使用

8.更简单的获取Bean对象 (3种方式)

  • 属性注入

优点:实现简单

缺点:无法注入一个不可变对象;只是用于IOC容器;更容易违背单一设计原则

  • 构造方法注入(当类里面只有一个构造方法,AutoWired也可以省略)

  • 构造方法注入(使用@Resource关键词)

@Autowired和@Resource区别:出身不同:@Autowired 来⾃于 Spring,⽽ @Resource 来⾃于 JDK 的注解;使⽤时设置的参数不同:相⽐于 @Autowired 来说,@Resource ⽀持更多的参数设置,例如
name 设置,根据名称获取 Bean。@Autowired 可⽤于 Setter 注⼊、构造函数注⼊和属性注⼊,⽽ @Resource 只能⽤于 Setter 注
⼊和属性注⼊,不能⽤于构造函数注⼊。

优点:可以注入不可变对象;注入的对象不会被修改(加上final)构造方法在类加载时只执行一次;注入对象被完全初始化;通用性更好

缺点:没有属性注入简单

  • Setter注入(从Spring里面取对象)

优点:更符合单一设计原则,只针对一个属性;写法比属性注入复杂,更符合单一设计原则

缺点:不能注入不可变对象;注入的对象可以被修改(set方法是普通方法,可被重复调用,调用时存在修改风险)

9.同⼀类型多个 @Bean 报错 

  • 方法1:使⽤ @Resource(name="XXX")

  • 方法2:使⽤ @Qualifier 注解定义名称

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/255764.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Seaborn和Matplotlib的可视化案例分析

处理数据有时会有点无聊。将原始数据转换为可理解的格式是整个过程中最重要的部分之一&#xff0c;那么为什么只停留在数字上&#xff0c;当我们可以将数据可视化为令人兴奋的图表时&#xff0c;这些图表可以在python中获取。这篇文章将重点探索耐人寻味的预处理之旅。 Seabor…

Python进阶----在线翻译器(Python3的百度翻译爬虫)

目录 一、此处需要安装第三方库requests: 二、抓包分析及编写Python代码 1、打开百度翻译的官网进行抓包分析。 2、编写请求模块 3、输出我们想要的消息 三、所有代码如下&#xff1a; 一、此处需要安装第三方库requests: 在Pycharm平台终端或者命令提示符窗口中输入以下代…

npm修改镜像源

背景&#xff1a;切换npm镜像源是经常遇到的事&#xff0c;下面记录下具体操作命令 1. 打开终端运行"npm config get registry"命令来查看当前配置的镜像源 npm config get registry2. 修改成淘宝镜像源"https://registry.npmjs.org/" npm config set re…

腾讯云4核8G12M轻量应用服务器性能够用吗?支持多少人?

腾讯云轻量4核8G12M轻量应用服务器支持多少人同时在线&#xff1f;通用型-4核8G-180G-2000G&#xff0c;2000GB月流量&#xff0c;系统盘为180GB SSD盘&#xff0c;12M公网带宽&#xff0c;下载速度峰值为1536KB/s&#xff0c;即1.5M/秒&#xff0c;假设网站内页平均大小为60KB…

C++重新入门-C++变量作用域

目录 1.C变量定义 2.C作用域 3.局部变量 4.全局变量 5.块作用域变量 6.初始化局部变量和全局变量 1.C变量定义 一般来说有三个地方可以定义变量&#xff1a; 在函数或一个代码块内部声明的变量&#xff0c;称为局部变量。 在函数参数的定义中声明的变量&#xff0c;称为…

nodejs爬虫框架

nodejs爬虫框架 在Node.js中&#xff0c;有一些常用的爬虫框架可以帮助你实现网页抓取和数据提取的任务。以下是几个流行的Node.js爬虫框架&#xff1a; 1. **Puppeteer**: Puppeteer 是由 Google 开发的一个用于控制 headless Chrome 或 Chromium 浏览器的 Node.js 库。它提供…

浅谈人工智能之深度学习~

目录 前言&#xff1a;深度学习的进展 一&#xff1a;深度学习的基本原理和算法 二&#xff1a;深度学习的应用实例 三&#xff1a;深度学习的挑战和未来发展方向 四&#xff1a;深度学习与机器学习的关系 五&#xff1a;深度学习与人类的智能交互 悟已往之不谏&#xff0…

LeetCode周赛384 题解

AK 第 384 场周赛 - 力扣&#xff08;LeetCode&#xff09; 前两题都是签到, 略。 第三题: 回文字符串的最大数量 1、题意: 给定一个字符串数组&#xff0c;总字符数量不超过1e6, 可以交换其中的任意两个字符&#xff0c;问能构造最多几个回文字符串。 2、题解: 首先我…

uniapp /微信小程序 使用map组件实现手绘地图方案

获取地图范围 点图拾取坐标-地图开放平台|腾讯位置服务 获取需要手绘地图左下角和右上角GPS坐标 以北京故宫为例&#xff1a; 截取需要手绘地图进行手绘地图制作 ​​​​​​​​​​​​​​ 素材处理 由于地图素材文件比较大&#xff0c;小程序又限制包大小<2M,无…

Spring Native 解放 JVM

一、Spring Native 是什么 Spring Native可以通过GraalVM将Spring应用程序编译成原生镜像&#xff0c;提供了一种新的方式来部署Spring应用。与Java虚拟机相比&#xff0c;原生镜像可以在许多场景下降低工作负载&#xff0c;包括微服务&#xff0c;函数式服务&#xff0c;非常…

(已解决)将overleaf上的文章paper上传到arxiv上遇到的问题。

文章目录 前言初级问题后续问题 前言 首先说一点&#xff0c;将paper的pdf文件直接上传arxiv是不行的&#xff0c;arxiv要求我们要上传源文件&#xff0c;所以才这么麻烦。 初级问题 首先上传文件之后有可能会在下面这个界面出现问题&#xff0c;这里一般都比较常见的问题&a…

重温阿里云宝塔面板部署前后端项目

首先祝大家新年快乐啊&#xff01; 回到老家&#xff0c;便打算趁这一段空闲时间提升一下自己&#xff0c;重点是学习实践一下echarts相关内容&#xff0c;很多公司项目都需要实现可视化&#xff0c;所以在bilibili上找了黑马的一个教程开始学习&#xff0c;不同的是&#xff…

【JAVA WEB】 百度热榜实现 新闻页面 Chrome 调试工具

目录 百度热榜 新闻页面 Chrome 调试工具 --查看css属性 打开调试工具的方式 标签页含义 百度热榜 实现效果&#xff1a; 实现代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"vi…

《CSS 简易速速上手小册》第4章:视觉美学(2024 最新版)

文章目录 4.1 颜色理论在 CSS 设计中的应用&#xff1a;网页的调色盘4.1.1 基础知识4.1.2 重点案例&#xff1a;创建一个具有情感设计的登录页面4.1.3 拓展案例 1&#xff1a;使用颜色增强信息的可视化表示4.1.4 拓展案例 2&#xff1a;利用颜色创建网站的品牌身份 4.2 字体与文…

生成式人工智能攻击的一年:2024

趋势科技最近公布了其关于预期最危险威胁的年度研究数据。生成人工智能的广泛可用性和质量将是网络钓鱼攻击和策略发生巨大变化的主要原因。 趋势科技宣布推出“关键可扩展性”&#xff0c;这是著名年度研究的新版本&#xff0c;该研究分析了安全形势并提出了全年将肆虐的网络…

JavaEE作业-实验二

目录 1 实验内容 2 实验要求 3 思路 4 核心代码 5 实验结果 1 实验内容 实现两个整数求和的WEB程序 2 实验要求 ①采用SpringMVC框架实现 ②数据传送到WEB界面采用JSON方式 3 思路 ①创建一个SpringMVC项目&#xff0c;配置好相关的依赖和配置文件。 ②创建一个Con…

【Jenkins】Jenkins关闭Jenkins关闭、重启

目录 一、Jenkins关闭、重启 二、Jenkins服务的启动、停止方法。 一、Jenkins关闭、重启 1.关闭Jenkins 只需要在访问jenkins服务器的网址url地址后加上exit&#xff0c;关闭Jenkins服务。 例如&#xff1a;http://localhost:8081/exit 2.重启Jenkies 只有在Jenkins服务启动…

macOS Sonoma 14.3.1(23D60)发布

系统介绍 黑果魏叔2 月 9 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 14.3.1 更新&#xff08;内部版本号&#xff1a;23D60&#xff09;&#xff0c;本次更新距离上次发布隔了 17 天。 魏叔 查询苹果官方更新日志&#xff0c;macOS Sonoma 14.3.1 修复内容和 …

专业145+总分400+合肥工业大学833信号分析与处理综合考研经验电子信息通信,真题,大纲,参考书

今年专业课145总分400&#xff0c;我总结一下自己的专业课合肥工业大学833信号分析与处理和其他几门的复习经验。希望对大家复习有帮助。 我所用的教材是郑君里的《信号与系统》&#xff08;第三版&#xff09;和高西全、丁玉美的《数字信号处理》&#xff08;第四版&#xff…

[职场] 大厂群面的基本题型 #学习方法#其他

大厂群面的基本题型 大厂群面的基本题型 群面&#xff0c;又叫做“无领导小组面试”。历年来是企业校招时&#xff0c;进行大批量刷人的有效方法。流行于互联网、快消、银行、四大等多个行业。因为难度大、情况复杂、淘汰率高&#xff0c;又被称为“死亡面试”。 无领导小组…