- <bean name="..." class="..." scope="prototype">
Spring注入
以redis爲例子對spring配置文件的注入進行詳述下:
在配置文件中有一個配置文件,名稱爲: spring-config-redis.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"
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>標籤後面添加一個屬性:
spring注入的幾種方法,1,2種方法用的偏多一點);
1、set注入
2、構造器注入
3、靜態工廠方法注入
4、實例工廠方法注入
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.