java---基于XML的 Spring Bean 注册与注入

目录

前言

一、将类直接注册

1.构造方法注册与注入

2.setter方法注册与注入

二、将已经建好的对象注册

1.通过静态方法

2.通过另一个bean的实例化方法

总结


前言

基于XML的Spring对象的注册,一般分为两种形式;一是直接将类注册到Spring容器,通过构造方法、setter方法。二是将一个已经创建好的对象进行注册,通过静态方法、另外一个bean的实例化方法。

一、将类直接注册

通过这种方法,我们就直接将对象的创建过程交给了Spring容器去完成。

将类注册分为两种:1.构造方法注册   2.setter方法注册

1.构造方法注册与注入

public class EmptyClass {
    public EmptyClass() {
      
        System.out.println("EmptyClass 正在被调用");
    }
}

将上面这个类通过XML的配置注册Spring容器中。

在XML中相关的配置:

<bean id="我的第一个商品" class="com.ioc2.EmptyClass" />

 其中对于id,只是起的一个名字,只要不重复就可以。这种方式相当于将EmptyClass 类的无参构造提供给Spring容器,使其完成创建。

注册新的类,且通过他的构造方法注入其他对象:

// 构造我们的 SecondClass,请将 EmptyClass 送货上门(注入进来)
// 同时,将 SecondClass 也委托 Spring 容器进行实例化 + 售卖
public class SecondClass {
    public SecondClass(EmptyClass emptyClass) {
        System.out.println("我是 SecondClass(), emptyClass 是 : " + emptyClass.toString());
    }
}

XML配置中相关的配置:

 <!-- 注册新的类,并且进行构造方法注入 -->
    <bean id="我的第二个商品" class="com.ioc2.SecondClass">
        <!-- 请用 "我的第一个商品" 的对象,注入我的构造方法参数中 -->
        <constructor-arg ref="我的第一个商品" />
    </bean>

 这样,我们我们不仅新注册了一个新的SecondClass对象,而且还通过构造方法注入了需要的对象。注意: 这里我们注入的这个对象,必须是已经注册过的,才可以被Spring注入。

2.setter方法注册与注入

public class ThirdClass {
    private EmptyClass emptyClass;

    private SecondClass secondClass;

    public ThirdClass() {
        System.out.println("ThirdClass()");
    }

    public void setEmptyClass(EmptyClass emptyClass) {
        System.out.println("setEmptyClass(), " + emptyClass);
        this.emptyClass = emptyClass;
    }

    public void setSecondClass(SecondClass secondClass) {
        System.out.println("setSecondClass() + " + secondClass);
        this.secondClass = secondClass;
    }
}

对于上述的代码,我们想要将ThirdClass注册到Spring容器,并且通过setter方法,将EmprtClass、SecondClass 这两个对象注入。

下面是XML相关的配置:

 <!-- setter 方法注入 -->
    <bean id="我的第三个商品" class="com.ioc2.ThirdClass">
        <property name="emptyClass" ref="我的第一个商品" />
        <property name="secondClass" ref="我的第二个商品" />
    </bean>

 这样配置以后,相关的注册和注入都已经实现了。

二、将已经建好的对象注册

这相当于对象的创建过程在我们手里。

1.通过静态方法

想要将Person对象注册进入Spring容器

public class Person {
    public Person() {
        System.out.println("Person() 构造方法被调用了");
    }
}
public class SomeClass {
    public SomeClass() {
        System.out.println("SomeClass() 构造方法被调用了");
    }

    // 静态方法(直接通过类名调用)
    // 语义:返回一个对象
    // 这类方法被称为工厂方法
    public static Person createPerson() {
        System.out.println("createPerson() 被调用");
        return new Person();
    }
}

 对应XML相关的配置:

<!-- bean 的实例化过程我们介入 -->
<bean id="通过工厂注册" class="com.ioc.SomeClass" factory-method="createPerson" />

 这里需要注意一下:通过上述的执行,只会将Person对象注册进入Spring容器,SomeClass类不会被注册进去。

2.通过另一个bean的实例化方法

public class SomeClass {
    public SomeClass() {
        System.out.println("SomeClass() 构造方法被调用了");
    }


    public Person instanceCreatePerson() {
        System.out.println("instanceCreatePerson() 被调用");
        return new Person();
    }
}

 注意:在这个代码中,我们如果要将Person对象注册进去,那么,我们的SomClass类也需要被注册进入Spring容器。因为我们这个是实例化方法,所以在Spring容器中需要有一个SomeClass对象,来调用这个方法,完成Person对象的注册。

关于XML的相关的配置:

  <bean id="只是一个工具bean" class="com.ioc.SomeClass" />

    <bean id="通过实例化工厂" factory-bean="只是一个工具bean" factory-method="instanceCreatePerson" />

 也就是说,此处的SomeClass类,就是为了调用实例化方法而被注册进去的一个“辅助工具”。


总结

加油哦~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值