准备工作
bean:一个对象在多个地方使用。
spring和spring boot:spring和spring boot项目;spring相当于老版本
spring boot本质还是spring项目;为了方便spring项目的搭建;操作起来更加简单
spring(Core)核心项目;就是普通项目。并不是spring web项目
要求:MySQL5.7版本;idea 2021版本(因为相关插件在2022版本后收费)
配置maven
1:下载Maven(官网下载)
2:环境变量配置;系统变量下新建
3:系统变量的path下点击编辑然后选择新建
4:测试效果;win+R 输入:mvn -v
创建项目
1:创建Maven项目;保存的路径不能有中文
修改配置文件
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
注意:配置完后刷新maven前有点问题要处理;它只会下载没有完成的jar包。当你如果没配置国内源时有些jar包下载失败了;下到一半然后失败;这种jar包它是不会重新下载的;它是看你有没有的。所以我们在刷新前先清空本地仓库之前的所有jar包;在我们刚才配置的地方下一个。(把这里里面东西全部删掉;然后重新刷新maven)
maven刷新一下;手动在pom.mxl添加一个配置;需要在这里刷新后才触发的下载
添加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"));
ApplicationContext和XmlBeanFactory区别
假设再增加一个老师类:里面有构造方法;用来验证对象有没有创建。我们把这个老师对象存进spring去、
区别:
代码执行到这一行;执行你xml里的代码;它会将所有的对象创建出来;才是真正把所有的对象存进spring去了。
XmlBeanFactory写法:对象都不创建的;要具体用谁才创建谁。懒加载;这样子效率确实是比较慢;当getBean才会去加载对应的Bean。懒汉模式;ApplicationContext是饿汉模式。
总结:
ApplicationContext写法:费内存;优点;一次性加载;之后的读取会非常的快。
XmlBeanFactory写法:省内存;调用时候才加载;性能比较低。(在以前内存有限;资源有限比较适合)
关系上:ApplicationContext是BeanFactory的子类;功能上不同;父类的功能是比子类小。
获取bean三种方式
取都是get方法;但是这个方法有重载;通过刚才id获取bean的方式有点问题;取的时候是要强转;如果是null那不就报错了吗。
1:名称id获取;刚才的写法。
2:根据类型获取;不需要强制转换;返回的就是这个类型
但是这种取法;我们会存在一个类型存多次(这种存放很常见;因为就相当于存多个对象);这样子直接用这种方法取;没有找到唯一bean的约束异常;它不知道应该用哪个。
3:根据类型和名称一块获取。这就能找到唯一的;它是先根据名字查找再根据类型查找。