spring ioc的xml形式实现

spring ioc的xml形式实现

导入依赖(idea需要配置 JDK 17或者降低spring-context版本)

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.0.6</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.3.1</version>
        </dependency>
    </dependencies>

一、无参构造方法实现ioc

  1. 待注入容器的bean定义
public class JavaBean implements JavaBeanInteface{
    public void doWork(){
        System.out.println("JavaBean.doWork");
    }
}
  1. 实现的接口定义
public interface JavaBeanInteface {
}
  1. .xml文件(放在resouces目录下)定义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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 1.使用无参构造函数实例化组件
     一个bean 信息,一个组件对象
     id 通过id获取对象
     class 类的全限界定符
     -->
    <bean id="javaBean" class="com.binbin.ioc.JavaBean"></bean>    
</beans>
  1. 获取和使用bean
  • 方式一:通过id获取bean
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-01.xml");
JavaBean javaBean = (JavaBean) applicationContext.getBean("javaBean"); // 1.通过id 获取bean对象
javaBean.doWork();
  • 方式二:通过bean的类型获取bean
JavaBean javaBean1 = applicationContext.getBean(JavaBean.class);
  • 方式三:通过bean的id和类型获取bean
JavaBean javaBean2 = applicationContext.getBean("javaBean",JavaBean.class);
  • 方式四:通过bean实现的接口的类型获取bean(确保接口只有一个子类,否则容器不知道获取哪一个)
JavaBean javaBean3 = (JavaBean) applicationContext.getBean(JavaBeanInteface.class);

二、通过静态工厂实现ioc

  1. 待注入容器的bean定义
public class Car {
    private String make;
    private String model;

    // 带参数的构造函数
    public Car(String make, String model) {
        this.make = make;
        this.model = model;
    }

    // getters and setters
    public String getMake() {
        return make;
    }

    public void setMake(String make) {
        this.make = make;
    }

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }
}
  1. 静态工厂类定义
public class CarFactory {
    // 静态工厂方法
    public static Car createCar(String make, String model) {
        return new Car(make, model);
    }
}
  1. .xml文件(放在resouces目录下)定义bean信息
 <bean id="car" class="com.binbin.ioc.CarFactory" factory-method="createCar">
        <constructor-arg name="make" value="奔驰"></constructor-arg>
        <constructor-arg name="model" value="模型"></constructor-arg>
    </bean>
  1. 获取bean和使用bean
  • 通过id获取

  • 通过bean类型获取

Car car = (Car) applicationContext.getBean("car");
Car car =  applicationContext.getBean(Car.class)
  1. 注:静态工厂本身不会被实例化,不会存入ioc容器

三、通过实例工厂实现ioc

  1. 待注入容器的bean定义
public class Car {
    private String make;
    private String model;

    // 带参数的构造函数
    public Car(String make, String model) {
        this.make = make;
        this.model = model;
    }

    // getters and setters
    public String getMake() {
        return make;
    }

    public void setMake(String make) {
        this.make = make;
    }

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }
}
  1. 工厂类定义
public class CarFactory {
    public Car createCarByInstantiation(String make, String model){
        return new Car(make, model);
    }
}
  1. .xml文件(放在resouces目录下)定义bean信息
  • 工厂本身也会被实例化注入容器
  • 指定factory-bean和factory-method
  • 构造函数有参数指定参数即可
<?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">
    <!-- 3.使用实例工厂实现ioc
         a.定义工厂bean
    -->
    <bean id="carFactory1" class="com.binbin.ioc.CarFactory">
    </bean>
    <bean id="car1" factory-bean="carFactory1" factory-method="createCarByInstantiation">
        <constructor-arg  name="make" value="Toyota" />
        <constructor-arg name="model" value="Camry" />
    </bean>
</beans>
  1. 获取bean和使用bean
  • 通过id获取bean
 Car car1 = (Car) applicationContext.getBean("car1");
  • 通过bean的类型获取bean
Car car1 =  applicationContext.getBean(Car.class);
  • 通过id和bean类型获取bean
Car car1 = (Car) applicationContext.getBean("car1",Car.class);

小结

总的来说,大概几个步骤,搭建maven工程、引入依赖、定义类、xml定义类信息、实例化容器ClassPathXmlApplicationContext、通过bean的id、类型获取到bean

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值