Spring核心与设计思想、简单的创建和对象的读取存储

news/2025/1/6 5:48:55/

【重点】

1 创建 Spring 项目

        a.创建一个maven项目【maven的依赖导入,导一次用终身】

        b.添加 spring-config.xml 依赖 【copy一下】

        c.创建一个启动类(作用:为后续 Spring 容器中获取Bean做准备)

2.存储Bean

        a.创建Bean对象

        b.通过spring-config.xml <bean id="名称" class=“包名+类名”></bean>

3.读取Bean

        a.得到Spring对象(ApplicationContext,BeanFactory)

        b.通过Spring对象的getBean获取Bean对象【DI操作

        c.使用Bean

目录

一、为什么要开始学习框架,Servlet学的不挺香的吗?

二、Spring核心与设计思想(两个重点 Ioc、DI)

2.1什么是Spring

2.2什么是容器

2.3什么是IoC

2.4运用IoC前后对比举例

2.5什么是DI

三、Spring的创建和使用


一、为什么要开始学习框架,Servlet学的不挺香的吗?

运用Servlet写一个项目需要有如下过程:

1.配置Tomcat

2.引入响应jar包(加入依赖)

3.打war包发布

...... 熟悉Servlet的都知道只要一点点错误就会导致(致命)

痛点:

1.添加外部 jar 不⽅便,容易出错,⽐如添加了⼀个不匹配的外部 jar 版本;

2.运⾏和调试的时候需要配置 tomcat 不⽅便;

3.发布不⽅便,servlet 项⽬必须依靠外置的 tomcat(外置的 web 容器)运⾏。

4.路由配置不⽅便,⼀个访问地址对应⼀个 Servlet 类。

。。。。。。(英文的省略号已经不足以表达我的无语😶)

 从开始学习框架开始,对比Servlet来说就会有如下优势 (SpringBoot VS Servlet)

1.无需配置Tomcat,点击"运行"就可以运行项目,Spring Boot 内置Web容器,可以直接运行

2.快速添加外部jar包

3.快速发布(使⽤ java -jar ⽅式就可以发布)

4.对象自动装配。

5........

二、Spring核心与设计思想(两个重点 Ioc、DI)

2.1什么是Spring

 上图是在Spring官网上看到的关于一部分Spring的介绍(其实压根就没介绍)Spring 中文网 (springref.com)

我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃⽽ 庞⼤的社区,这就是它之所以能⻓久不衰的原因。Spring ⽀持⼴泛的应⽤场景,它可以让 Java 企业级 的应⽤程序开发起来更简单。
⽤⼀句话概括 Spring: Spring 是包含了众多⼯具⽅法的 IoC 容器

2.2什么是容器

容器->装东西的"盒子"   A容器->装A的"盒子"

Tomcat是web容器
List、Map是数据存储容器
Spring 是包含了众多⼯具⽅法的 IoC 容器

2.3什么是IoC

IoC = Inversion of Control 翻译成中⽂是“控制反转”的意思,也就是说 Spring 是⼀个“控制反转”的容器。如下开始展示传统的程序开发和IoC开会的区别。

2.4运用IoC前后对比举例

a. 传统的程序开发 
                                      一个房间有人和狗

package com.spring.demo;/*** Created with IntelliJ IDEA.* Description:* User: 97175* Date: 2023-07-18* Time: 14:35*/
public class Room {private Human man1 = new Human();private Human man2 = new Human();private Dog dog1 = new Dog();private Dog dog2 = new Dog();public void print(){System.out.println("hi Room~");}
}
package com.spring.demo;/*** Created with IntelliJ IDEA.* Description:* User: 97175* Date: 2023-07-18* Time: 14:39*/
public class Dog {public void print(){System.out.println("hi Dog~");}
}
package com.spring.demo;/*** Created with IntelliJ IDEA.* Description:* User: 97175* Date: 2023-07-18* Time: 14:35*/
public class Human {public void print(){System.out.println("hi Human~");}}

这时候就能发现到如果我添加了或者修改了Human和Dog的构造方法,此时我就需要花费更多的时间去修改后期调用用构造方法初始化的对象,例如在Room中就要不停的修改Human()和Dog()。 也就是生成一个Room类,还要去管生成Human类和Dog类

耦合性极强 代码和代码直接产生极强的粘合性,一动全动 真的栓Q!

 如果我们转变思路,

2.5什么是DI

        实现IoC的过程叫做DI,IoC是思想,DI是实现

三、Spring的创建和使用

【1】创建Spring项目

【1.1】创建一个Spring项目

①创建Maven项目②添加Spring框架支持【依赖】(Spring-context、Spring-beans)③添加启动类

重点在于①配置国内源 File->settings->搜索maven【idea有两个settings,一个是本项目的,另一个是新项目的配置文件】

【如下操作是对本项目的maven进行配置】

打开User settings File目录,如果能找到settings.xml,就在mirrors中加入下面这一段【配置阿里云maven国内源】

<mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>        
</mirror>

如果没能找到settings.xml,将资源包里的settings.xml复制到对应路径去。

OK以后重新加载jar包

如上操作就完成了本项目的maven配置,同理要将新项目做同样的处理新项目的settings寻找路径如下:

在重新加载jar包

【极特殊的情况,原先的jar包没有下载完成退出了,重新加载可能会下载不完全】

解决办法,把jar包全删了,重新加载。删除路径如下:

把repository目录下的所有文件全删除,重新再加载一次jar包。加载jar包方法如下:

 

一定要保证网络畅通,maven路径没有中文,配置路径正确,基本就会加载正确。

【1.2】在pom.xml添加Spring-context依赖

<dependencies><!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.23</version></dependency></dependencies>

【1.3】添加一个启动类   在一个类里有一个main方法

public class application {public static void main(String[] args) {}
}

 【2】将 Bean 对象存储到Spring当中

【2.1】创建一个Bean对象

public class Student {public void sayHi(){System.out.println("Hi");}
}

 【2.2】将Bean存储到Spring容器当中  【先添加Spring配置文件】

在resource目录下创建spring-config.xml,将下面这段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>

添加 <bean> ,给出 id 和 class 

【2.3】从 Spring 容器中读取到 Bean

        1.先得到Spring(上下文)对象

【ApplicationContext会将spring-config.xml所有的对象初始化并存储到Spring中】

ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");

【BeanFactory会将spring-config.xml中的对象用到哪个就初始化哪个】 

BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));

        2. 从上下文对象中获取Bean和使用Bean

【ApplicationContext】

Student student = (Student)context.getBean("student");
student.sayHi();

 【BeanFactory】

Student student = (Student) beanFactory.getBean("student");
student.sayHi();

再添加一个Teacher类,观察运行结果

【ApplicationContext】一次性加载,读取非常快,但费内存

 【BeanFactory】调用时才会加载,读取慢,但节省内存

【经典面试题ApplicationContext与BeanFactory的区别】

 对于获取Bean的三种方式

第一种 通过 id (名称) 获取【需要暴力强转

Student student = (Student)context.getBean("student");

第二种 通过类型进行获取【不需要强转 但若存在多个会报错

Student student1 = context.getBean(Student.class)

第三种 通过 id(名称)和类型进行获取【不需要强转】 推荐

Student student1 = context.getBean("student",Student.class);


http://www.ppmy.cn/news/1124222.html

相关文章

前端教程-vite

官网 Vite中文网 视频教程 Vite世界指南&#xff08;带你从0到1深入学习 vite&#xff09;

74、SpringBoot 整合 Spring Data JDBC

总结&#xff1a;用起来跟 Spring Data JPA 差不多 什么是 JdbcTemplate&#xff1f;&#xff08;Template译为模板&#xff09; Spring 框架对 JDBC 进行封装&#xff0c;使用 JdbcTemplate 方便实现对数据库操作 ★ Spring Data JDBC 既不需要JPA、Hibernate这种ORM框架&a…

c语言基础知识+OS+数据结构

c语言&#xff1a; memory section&#xff1a; .bss&#xff1a; uninitialized or zero-initialized global and static variables .data: initialized global and static variables .text: Read only, code and const C语言编译流程&#xff1a; pre-compiler: …

Docker ---- network中的命令详解

最近一直在使用docker&#xff0c;记录一些遇到的问题。 问题1&#xff1a;在搭建ealsticsearch与kibana时运行成功后第二次想运行出错了或者访问不了&#xff1f; 因为两个启动的容器是被互相隔离的&#xff0c;没有启用网络的互相通信不了。 问题2&#xff1a;怎么查看自己…

什么是电源的纹波和噪声?

1、本文内容如有错误&#xff0c;欢迎交流指正。 2、本文仅作为本人学习笔记&#xff0c;部分内容来源于网络、书籍&#xff0c;如涉及侵权&#xff0c;请联系删除。 什么是纹波&#xff1f; 纹波是就是电源本身的一种周期性波动。 直流稳定电源一般是由交流电源经整流稳压形成…

vue项目打包部署到服务器,报错。

这个是因为后端部署服务器时&#xff0c;名称没有对上&#xff0c;不是前端的问题&#xff0c;后端配置名称和前端的包名称保持一致就可以了。

bigemap在林场的应用情况

选择Bigemap的原因&#xff1a; ①之前一直是使用的谷歌地球&#xff0c;现在谷歌用起来不方便了&#xff0c;就在网上搜索找一款可以替代的软件&#xff0c;工作使用需求还是挺大的&#xff0c;谷歌不能用对工作进展也影响非常大&#xff0c;在网上搜索到你们软件大部分功能都…

适合新手自学的网络安全基础技能“蓝宝书”:《CTF那些事儿》

CTF比赛是快速提升网络安全实战技能的重要途径&#xff0c;已成为各个行业选拔网络安全人才的通用方法。但是&#xff0c;本书作者在从事CTF培训的过程中&#xff0c;发现存在几个突出的问题&#xff1a; 1&#xff09;线下CTF比赛培训中存在严重的“最后一公里”问题&#xf…