IOC系列【XML装配Bean】:XML中Bean注入


使用bean标签来注入Bean

1. Constructor注入

  通过Bean的构造方法给Bean的属性注入值。

1.1 无参构造方法注入

<!--无参构造方法来注入Bean-->
<bean class="com.learning.spring.ioc.Book" id="book0"/>

1.2 有参构造方法注入

  在bean标签中使用constructor-arg标签来实现有参构造方法来注入Bean。

1.2.1 index方式

<!--有参构造方法注入:index表示属性定义的顺序-->
<bean class="com.learning.spring.ioc.Book" id="book1">
    <constructor-arg index="0" value="1"/>
    <constructor-arg index="1" value="三国演义"/>
    <constructor-arg index="2" value="30"/>
</bean>

1.2.2 name方式

<!--有参构造方法注入:name表示属性定义名称-->
<bean class="com.learning.spring.ioc.Book" id="book2">
    <constructor-arg name="id" value="2"/>
    <constructor-arg name="name" value="红楼梦"/>
    <constructor-arg name="price" value="40"/>
</bean>

2. Setter注入

  我们也可以通过Bean属性的set方法注入值。此时,在bean标签中我们使用property 标签来完成属性的注入。这里的name的值是根据setter方法名推断出来的值,而非属性名称。

<bean class="com.learning.spring.ioc.Book" id="book3">
    <property name="id" value="3"/>
    <property name="name" value="水浒传"/>
    <property name="price" value="30"/>
</bean>

3. P名称空间注入

  在名称空间中加入p名称空间,直接在bean标签的属性中使用p来设置属性值。注意,这里不是属性名称,而是和属性对应的setter方法一一对应。

<?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:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<!--在p名称空间的加持下直接给属性赋值,这里要和Setter方法名称保持一致-->
    <bean class="com.learning.spring.ioc.Book" id="book4" p:id="4" p:bookName="西游记" p:price="33"/>
</beans>

4. 工厂方法注入

4.1 静态工厂注入

4.1.1 静态工厂方法示例

  静态工厂方法提供了单实例的创建及获取。

public class OkHttpUtils {
    private static OkHttpClient OkHttpClient;

    public static OkHttpClient getInstance() {
        if (OkHttpClient == null) {
            OkHttpClient = new OkHttpClient.Builder().build();
        }
        return OkHttpClient;
    }
}

4.1.2 注入静态工厂方法提供的Bean

<bean class="org.javaboy.OkHttpUtils" factory-method="getInstance" id="okHttpClient"></bean>

4.2 实例工厂注入

  实例工厂就是工厂方法是一个实例方法,这样,工厂类必须实例化之后才可以调用工厂方法。

4.2.1 实例工厂方法示例

public class OkHttpUtils {
    // 注意这里是实例属性
    private okhttp3.OkHttpClient OkHttpClient;

    public OkHttpClient getInstance() {
        if (OkHttpClient == null) {
            OkHttpClient = new OkHttpClient.Builder().build();
        }
        return OkHttpClient;
    }
}

4.2.2 注入实例工厂方法提供的Bean

<!--先注册实例工厂-->
<bean class="com.learning.spring.ioc.OkHttpUtils" id="okHttpUtils"/>
<!--调用示例工厂的方法来注册实例okHttpClient-->
<bean class="okhttp3.OkHttpClient" factory-bean="okHttpUtils" factory-method="getInstance" id="okHttpClient"/>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值