【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.hqwc.cn/news/455350.html

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

相关文章

技术债解决思考v2

1、在实际情况中可能得先理解技术是为业务服务的&#xff0c;具体可见&#xff1a;BRD MRD PRD的概念、关系、区别 - 知乎 (zhihu.com) 2、理解之后&#xff0c;再根据上述办法来解决技术债&#xff0c;其中说服人的办法可以有借鉴五步说服人法&#xff1a;如何用五步有逻辑地…

使用代理IP有风险吗?如何安全使用代理IP?

代理IP用途无处不在。它们允许您隐藏真实IP地址&#xff0c;从而实现匿名性和隐私保护。这对于保护个人信息、绕过地理受限的内容或访问特定网站都至关重要。 然而&#xff0c;正如任何技术工具一样&#xff0c;代理IP地址也伴随着潜在的风险和威胁。不法分子可能会滥用代理IP…

【发票识别】新增针对图片发票的识别(升级中)

说明 为了完善发票识别的功能&#xff0c;目前发票识别支持发票图片格式的识别&#xff0c;增加可用性。 体验 体验地址&#xff1a;https://invoice.behappyto.cn/invoice-service/ 体验地址上面有示例的发票&#xff0c;可以下载上传识别或者复制url地址进行识别。 技术栈…

【数据分享】1929-2023年全球站点的逐年平均能见度(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 之前我们分享过1929-2023年全球气象站点的逐年平均气温数据、逐年最高气温数据…

【RT-DETR有效改进】轻量级下采样方法ContextGuided(参数量下降700W,轻量又涨点)

&#x1f451;欢迎大家订阅本专栏&#xff0c;一起学习RT-DETR&#x1f451; 一、本文介绍 本文给大家带来的是改进机制是一种替换Conv的模块Context Guided Block (CG block) &#xff0c;其是在CGNet论文中提出的一种模块&#xff0c;其基本原理是模拟人类视觉系统依赖上…

天线阵列车载应用——第1章 介绍 1.1节 汽车工业中的天线阵列:应用和频率范围

1.1 汽车工业中的天线阵列:应用和频率范围 无线通信系统的发展需要新的技术来支持更高质量的通信、新的服务和应用。近年来&#xff0c;汽车无线通信市场得到了极大的扩展。现代汽车使用不同的服务:AM/FM收音机、卫星广播(SDARS)、移动电话通信、数字音频广播(DAB)、远程无钥匙…

编译原理与技术(二)——词法分析(一)正则表达式

一、词法分析的概貌 一个程序&#xff0c;在我们看来往往是像下图这样的。 实际上&#xff0c;上面的程序本质上就是一个字符串&#xff0c;所以&#xff0c;它等价于下面这样的。 上面的字符串&#xff08;字符流&#xff09; &#xff0c;就是编译器接收到的程序的形式。 所…

wins 安装 tensorflow keras

1.python版本 python版本3.12&#xff0c;安装tensorflow会报错&#xff1a; 经过多次实验&#xff0c;使用的python版本是3.9.0 2.安装tensorflow a. pip install --trusted-host http://mirrors.aliyun.com/pypi/simple/ tensorflow2.6.0 速度有点慢&#xff0c;半个多小…

《爬虫职海录》卷二 • 爬在广州

HI&#xff0c;朋友们好&#xff0c;「爬虫职海录」第二期更新啦&#xff01; 本栏目的内容方向会以爬虫相关的“岗位分析”和“职场访谈”为主&#xff0c;方便大家了解一下当下的市场行情。 本栏目持续更新&#xff0c;暂定收集国内主要城市的爬虫岗位相关招聘信息&#xf…

GPT-1, GPT-2, GPT-3, GPT-3.5, GPT-4论文内容解读

目录 1 ChatGPT概述1.1 what is chatGPT1.2 How does ChatGPT work1.3 The applications of ChatGPT1.3 The limitations of ChatGPT 2 算法原理2.1 GPT-12.1.1 Unsupervised pre-training2.1.2 Supervised fine-tuning2.1.3 语料2.1.4 分析 2.2 GPT-22.3 GPT-32.4 InstructGPT…

CSS:三列布局

三列布局是指左右两列定宽&#xff0c;中间自适应。最终效果如下&#xff1a; HTML&#xff1a; <div class"container"><div class"left"></div><div class"center"></div><div class"right">…

Redis 命令大全

文章目录 启动与连接Key&#xff08;键&#xff09;相关命令String&#xff08;字符串&#xff09;Hash&#xff08;哈希&#xff09;List&#xff08;列表&#xff09;Set&#xff08;集合&#xff09;Sorted Set&#xff08;有序集合&#xff09;其他常见命令HyperLogLog&…