Spring注入
2016-04-08 11:41
387 查看
以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>标签后面添加一个属性:
<bean name="..." class="..." scope="prototype">
spring注入的几种方法,1,2种方法用的偏多一点);
1、set注入
2、构造器注入
3、静态工厂方法注入
4、实例工厂方法注入
在配置文件中有一个配置文件,名称为: 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>标签后面添加一个属性:
<bean name="..." class="..." scope="prototype">
spring注入的几种方法,1,2种方法用的偏多一点);
1、set注入
2、构造器注入
3、静态工厂方法注入
4、实例工厂方法注入
相关文章推荐
- java问卷调查java 写法
- Myeclipse 快捷键失灵,设置default快捷键---转载
- spring mvc+ajax 问转调查传参处理
- 《疯狂java讲义》笔记 1-5章
- java多线程web服务器
- HashMap浅析
- Java Socket编程
- JVM内存模型来解释多线程并发常见问题和volilate,final,ThreadLocal
- Java中String类型变量初值为null时的连接问题
- Java 程序死锁问题原理及解决方案
- Java Collection框架详解
- java CyclicBarrier 2
- java的mysql连库 增删改查语句、分页查询语句大全
- JVM、JRE、JDK
- java CyclicBarrier
- spring配置datasource的三种方式
- Java解析XML简单版
- Java的垃圾回收机制
- java之return解析
- Java 设计模式 <工厂模式>