- 准备工作
- 存bean
- 获取bean三种方式
准备工作
bean:一个对象在多个地方使用。
spring和spring boot:spring和spring boot项目;spring相当于老版本
spring boot本质还是spring项目;为了方便spring项目的搭建;操作起来更加简单
spring(Core)核心项目;就是普通项目。并不是spring web项目
要求:MySQL5.7版本;idea 2021版本(因为相关插件在2022版本后收费)
准备工作:
1:创建Maven项目;保存的路径不能有中文
2:添加依赖
maven在国际站点上下载很容易出问题;但是我们可以配置国内源;国内的镜像网站。默认是从国外网站下载;下载还有最大时间限制。比如你网络畅通只能每秒1kb;下个1024kb;假设最大超时时间是60秒;过60秒没下好它就会报错了。
配置国内源:idea这两个地方都得配置
这里分两步走:
if(上述文件夹下有settings.xml文件);需要自己修改配置;使用vscode打开;这样子有颜色区分就很容易看出哪些是注释。就不必关注这些。
没配置的是如下效果:
把这个内容拷贝过去
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
else:上述文件夹没有这个文件;直接拷贝现成版的。不需要再配置。
上述同样的操作再配置一遍:
随后maven刷新一下;就是我们之前手动在pom.mxl添加一个配置;我们也是需要在这里刷新后才触发的下载
但是这里有点问题;它只会下载没有完成的jar包。当你如果没配置国内源时有些jar包下载失败了;下到一半然后失败;这种jar包它是不会重新下载的;它是看你有没有的。所以我们在刷新前先清空本地仓库之前的所有jar包;在我们刚才配置的地方下一个。(把这里里面东西全部删掉;然后重新刷新maven)
添加spring依赖
spring依赖
使用5.x版本;5.3.26;6.x版本是要jdk17以上。在pom.mxl创建dependencies标签;粘贴进去。随后再刷新maven。
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.26</version>
</dependency>
下载一个;免费赠送多几个;context所依赖的。以上步骤设置完成;一次设置;后续都不需要再设置了。
存bean
创建一个启动类:正常在java里创建普通类;有main方法。存bean和取bean的操作就在这里。
配置文件:
<?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">
<!--名字望文生义即可;这段配置文件保存下来-->
</beans>
注入对象:
id属性:给这个对象取个名字;然后你取的时候也是要名字来取的
class是类名;如果是你的类在某个包下;这里就得是路径;包名+类名
注意: 取和存的名字是要相同;存进去的名字就得是不能重复;没有找到bean的定义;xml或者bean的名字是不是对的
取bean:
ApplicationContext:是一个接口;当前可以认为它就代表spring本身。
还能使用:BeanFactory作为spring上下文;
BeanFactory beanFactory=new XmlBeanFactory(new ClassPathResource(“spring-config.xml”));
这两者的区别:
假设再增加一个老师类:里面有构造方法;用来验证对象有没有创建。我们把这个老师对象存进spring去、
区别:
代码执行到这一行;执行你xml里的代码;它会将所有的对象创建出来;才是真正把所有的对象存进spring去了。
第二种写法:对象都不创建的;要具体用谁才创建谁。懒加载;这样子效率确实是比较慢(要用的时候才创建这怎么行呢)getBean才会去加载对应的Bean。懒汉模式;上面是饿汉模式。这种是不会创建老师类的对象。
第一种:费内存;优点;一次性加载;之后的读取会非常的快。
第二种:省内存;调用时候才加载;性能比较低。(在以前内存有限;资源有限比较适合)
关系上:ApplicationContext是BeanFactory的子类;功能上不同;父类的功能是比子类小。
获取bean三种方式
上述获取bean的方式有点问题;取的时候是要强转;如果是null那不就报错了吗。
1:名称获取;刚才的写法。
2:根据类型获取;不需要强制转换;返回的就是这个类型
但是这种取法;我们会存在一个类型存多次(这种存放很常见;因为就相当于存多个对象);这样子直接用这种方法取;没有找到唯一bean的约束异常;它不知道应该用哪个。
3:根据类型和名称一块获取。这就能找到唯一的。这种是推荐的。