Spring注入

以redis为例子对spring配置文件的注入进行详述下:
在配置文件中有一个配置文件,名称为: spring-config-redis.xml 如下:
<?xml version="1.0" encoding="UTF-8"?>
    default-autowire="byName">
    <bean id=" jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="500" />
        <property name="testOnBorrow" value="true" />
    </bean>

    <bean id=" jedis.shardInfo1" class="redis.clients.jedis.JedisShardInfo">
        <constructor-arg index="0" value="${redis.host1}" />
        <constructor-arg index="1" value="${redis.port1}" />
    </bean>

    <bean id=" shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool">
        <constructor-arg index="0" ref=" jedisPoolConfig" />
        <constructor-arg index="1">
            <list>
                <ref bean=" jedis.shardInfo1" />
            </list>
        </constructor-arg>
    </bean>

    <bean id="redisUtil" class="com.diligrp.website.util.redis.impl.RedisUtilImpl">
        <property name="shardedJedisPool" ref=" shardedJedisPool" />
    </bean>

    <bean id="manageRedisUtil" class="com.diligrp.website.util.redis.impl.RedisUtilImpl">
        <property name="shardedJedisPool" ref="shardedJedisPool" />
    </bean>

</beans>

如上,spring通过bean层层注入的,在class="com.diligrp.website.util.redis.impl.RedisUtilImpl"里面有一个属性名为shardedJedisPool 的属性 ( private ShardedJedisPool shardedJedisPool; ),但是shardedJedisPool 也是一个Object类型,.
class="redis.clients.jedis.ShardedJedisPool",是通过构造函数进行注入的的如下:
<constructor-arg index="0" ref=" jedisPoolConfig" />
        <constructor-arg index="1">
            <list>
                <ref bean=" jedis.shardInfo1" />
            </list>
        </constructor-arg>

这两个构造函数里面的参数分别是:
    <bean id=" jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="500" />
        <property name="testOnBorrow" value="true" />
    </bean>
在JedisPoolConfig类中有属性:maxIdle ,testOnBorrow 所以这两个值通过spring启动时注入
<property />这种方式是通过属性名称的方式

    <bean id=" jedis.shardInfo1" class="redis.clients.jedis.JedisShardInfo">
        <constructor-arg index="0" value="${redis.host1}" />
        <constructor-arg index="1" value="${redis.port1}" />
    </bean>
 <constructor-arg />这种方式的注入是通过构造函数的方式注入的

总结:
依赖注入的方式:  constructor-arg:通过构造函数注入。   property:通过setxx方法注入;
使用constructor-arg标签的index属性,对应于构造函数的多个参数,index属性的值从0开始
使用constructor-arg的type属性,避免构造子冲突(两个参数一样的构造函数,但是参数类型不一样,这里注入时需要加上type属性,避免冲突)
注入集合属性,使用list,map,set和props标签,分别对应List,Map,Set和Properties;

另外注意:通过Spring创建的对象默认是单例的,如果需要创建多实例对象可以在<bean>标签后面添加一个属性:
  1. <bean name="..." class="..." scope="prototype">  

spring注入的几种方法,1,2种方法用的偏多一点);
1、set注入
2、构造器注入
3、静态工厂方法注入
4、实例工厂方法注入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值