1. 项目搭建流程
1. pom.xml中引入依赖Spring-webMVC
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.18</version></dependency>
2.创建Spring配置文件 – applicationContext.xml
在resoures下创建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/beans http://www.springframework.org/schema/beans/spring-beans.xsd"></beans>
创建完毕后点击右上角的 configure application context 再选择create new application context… 。在弹出的弹窗里直接点击确定
3.创建测试用的类
Hello.java
package com.zbt.ioc.dto;/*** @author* @createAt 2025/1/8 21:07*/public class Hello {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public void show(){System.out.println("Hello "+name);}
}
4.配置文件中配置类
<!-- 使用Spring来创建对象 在Spring中这些对象统称为Bean --><bean id="hello" class="com.zbt.ioc.dto.Hello" name="helloOtherName"><property name="name" value="Spring"/></bean>
5. 编写测试类
HelloSpring.java
package com.zbt.ioc.controller;import com.zbt.ioc.dto.Hello;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** @author* @createAt 2025/1/8 21:00*/public class HelloSpring {public static void main(String[] args) {//通过加载配置文件 获取Spring的上下文对象ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");//我们的对象都在Spring中管理了,我们要使用的时候 直接去容器中取出来就可以了/*<bean id="hello" class="com.zbt.ioc.dto.Hello" name="helloOtherName"><property name="name" value="Spring"/></bean>相当于自动帮我们new 了 一个Hello对象 id 为变量名 class为要new 的对象的路径 name为别名,可以通过逗号分隔取多个别名 context.getBean()通过别名也能取到对象其中 property 相当于 给对象的属性赋了一个值 name为属性名 value为属性值(通过属性的set方法注入了属性值)思考:对象是由Spring创建的 属性也是Spring赋值的 这个过程就叫做控制反转*///通过 id 取Hello hello = (Hello)context.getBean("hello");hello.show();//通过 别名 取Hello helloOtherName = (Hello)context.getBean("helloOtherName");helloOtherName.show();}
}
运行结果
2.bean标签简介
<bean id="hello" class="com.zbt.ioc.dto.Hello" name="helloOtherName"><property name="name" value="Spring"/></bean>
这段配置文件相当于自动帮我们new 了 一个Hello对象 ,并将对象的name属性赋值为Spring
其中:
id :为变量名
class:为要new 的对象的路径
name:为别名,可以通过逗号分隔取多个别名 context.getBean()通过别名也能取到对象
property: 相当于 给对象的属性赋了一个值 (name:为属性名 ;value:为属性值(通过属性的set方法注入了属性值); ref:为引用Spring中已经注入的类的id)
思考:
对象是由Spring创建的
属性也是Spring赋值的
这个过程就叫做控制反转(IOC)
3.Spring IOC对象创建方式
默认为调用实体类的无参构造方法
注意:如果没有无参构造 且 未通过constructor-arg标签指定有参构造则会报错
通过constructor-arg标签指定有参构造创建对象
共有三种方式:
1. 通过下标给构造器传参数(这里的下标是指构造函数的第几个参数)
2. 通过参数类型匹配给构造器传参数 不推荐使用,如果构造器有多个类型相同的参数就会无法匹配
3. 直接通过参数名匹配给构造器传参数 推荐使用
<bean id="hello" class="com.zbt.ioc.dto.Hello" name="helloOtherName"><constructor-arg index="0" value="第一个参数"/><constructor-arg type="java.lang.String" value="给String类型的参数赋值"/><constructor-arg name="name" value="给属性name赋值"/></bean>