3、Spring IOC&DI使用
2016-05-22 17:31
441 查看
基础类型注入
String注入
<property name="str" value="String Type" />
Integer类型
<property name="i" value="15" />
浮点型
<property name="f" value="15.2" />
布尔型
<property name="flag" value="true" />
其他类型注入
Map注入
<property name="list"> <list> <value>1</value> <value>2</value> </list> </property>
List注入
<property name="map"> <map> <entry key="id" value="123456" /> <entry key="name" value="codestd" /> </map> </property>
枚举类型注入
枚举类如下package com.codestd.springstudy.lesson02; public enum EnumerationType { A,B,C }
第一种:使用FieldRetrievingFactoryBean创建枚举对象。然后注入对象
<bean id="A" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"> <property name="staticField" value="com.codestd.springstudy.lesson02.EnumerationType.A" /> </bean> ... <property name="enumType" ref="A" />
第二种:直接注入枚举的名称
<property name="enumType" value="A" />
第一种使用的是
ref,是将A对象注入到属性中;而第二种使用的是
value,注入的是字符串,然后由Spring通过枚举的valueOf(String)方法获取枚举对象。
构造函数注入
JavaBean代码如下public class SubBean { private String construct; public SubBean(){} public SubBean(String construct){ this.construct = construct; } public String toString(){ return construct; } }
第一种使用参数名称注入
<bean id="subBean" class="com.codestd.springstudy.lesson02.SubBean"> <constructor-arg name="construct" value="Construct Args"/> </bean>
第二种使用参数索引注入,即参数在构造函数的所有参数的位置。索引从0开始
<bean id="subBean" class="com.codestd.springstudy.lesson02.SubBean"> <constructor-arg index="0" value="Construct Args"/> </bean>
Bean的注入
使用XML配置文件方式
<bean id="subBean" class="com.codestd.springstudy.lesson02.SubBean"> </bean> <property name="subBean" ref="subBean" />
使用@Resource
@Resource private SubBean subBean;
使用@Autowire
@Autowired private SubBean subBean;
@Resource和@Autowire的区别
@Autowire可以通过required属性指定是否必须注入,如果
required=false当Spring无法从容器中找到与之匹配的对象时就不再注入,且不会报错。@Resource没有这样的参数。
当接口只有一个实现类是@Resource和@Autowire一样,切忽略属性名。即属性名不必与Bean的ID一致。
当接口有两个实现类时,@Resource可以通过
name=""和属性名注入,而@Autowire只能通过属性名注入。Spring会根据属性名,从Spring容器中查找与之匹配的Bean,然后注入。
package com.codestd.springstudy.lesson02; public interface AutowiredTest { } package com.codestd.springstudy.lesson02; import org.springframework.stereotype.Component; @Component public class AutowiredTestImpl1 implements AutowiredTest{ } ··· @Autowired private AutowiredTest autowiredTest; //等同于 @Resource private AutowiredTest autowiredTest;
如果多了一个实现类,则用上面的注入方法就不行了。
package com.codestd.springstudy.lesson02; import org.springframework.stereotype.Component; @Component public class AutowiredTestImpl2 implements AutowiredTest { } //使用 @Resource(name="autowiredTestImpl1") private AutowiredTest autowiredTest; //或 @Resource private AutowiredTest autowiredTestImpl1; //或 @Autowired private AutowiredTest autowiredTestImpl1;
相关文章推荐
- Java学习_ 基本数据类型_float
- 2、Spring Bean创建
- 1、Spring的基本配置
- myeclipse git
- Java中的反射和内省简单实例
- Java IO结构各种流详解
- Java 常用IO流操作详解
- SpringMVC中的设计模式
- 九度 OJ 1198:a+b
- Mybatis 快速入门之Hello World
- 从模板方法模式深入理解Java抽象类
- java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程 序和应用程序之间的体系结构不匹配
- Spirng+SpringMVC+Maven+Mybatis+MySQL项目搭建
- java的若干问题(1)——继承、多态、抽象类与接口
- 工厂模式(Factory Pattern)和java反射机制优化思考
- Spring整体架构及源码项目搭建
- IKExpressionV2.1.2快速入门
- SpringMVC上传文件例子
- java8和scala的简略对比
- android-eclipse编写aidl的时候报错aidl.exe error while creating directories