spring3笔记3-DI注入
来源:互联网 发布:淘宝购物车排序 编辑:程序博客网 时间:2024/06/03 21:34
Spring IoC容器注入依赖资源主要有以下几种基本实现方式:
构造器注入:就是容器实例化Bean时注入那些依赖,通过在在Bean定义中指定构造器参数进行注入依赖,包括实例工厂方法参数注入依赖,但静态工厂方法参数不允许注入依赖;
setter注入:通过setter方法进行注入依赖;
方法注入:能通过配置方式替换掉Bean方法,也就是通过配置改变Bean方法 功能。
1.构造器注入实例化与传统实例化比较:
以下面JavaBean类为例:
//参数名注入是有限制的,需要使用在编译程序时打开调试模式@java.beans.ConstructorProperties({"message", "index"}) public class JavaBean{
private String message;
private int index;private List<String> names;private Collection<String> values;private String[] arr1;private String[][] arr2;private Map<String, String> map1;private Properties props;
public JavaBean(message, index){
this.index = index;
this.message = message;
}public void setMessage(String message){
this.message = message;
}public void setIndex(int index){
this.index = index;
}public void setNames(List<String> names){
this.names = names;
}public void setValues(Collection<String> values){
this.values = values;
}public void setArr1(String[] arr1){
this.arr1 = arr1;
}public void setArr2(String[][] arr2){
this.arr2 = arr2;
}public void setMap1(Map<String, String> map1){
this.map1 = map1
}public void setProps(Properties props){
this.props = props;
}
public sayHello(){
System.out.println(message + "......." + index);
}
}
//传统:JavaBean bean = new JavaBean(paramValue1,paramValue2);
//构造器:
//根据参数索引注入:
<bean id="byIndex" class="...../JavaBean">
<constructor-arg index="0" value="paramValue1"/><constructor-arg index="1" value="paramValue2"/>
</bean>
//根据参数类型注入:
<bean id="byType" class="...../JavaBean">
<constructor-arg type="java.lang.String" value="paramValue1"/><constructor-arg type="java.lang.Integer" value="paramValue2"/>
</bean>
//根据参数名称注入
<bean id="byName" class="...../JavaBean">
<constructor-arg name="message" value="paramValue1"/><constructor-arg name="index" value="paramValue2"/>
</bean>
//实例化类JavaBean:
BeanFactory beanFactory = new ClassPathXmlApplicationContext("...././constructorDependencyInject.xml");//获取根据参数索引依赖注入的BeanJavaBean byIndex = beanFactory.getBean("byIndex", JavaBean.class);byIndex.sayHello();
//获取根据参数类型依赖注入的Bean//获取根据参数名称依赖注入的BeanJavaBean byType= beanFactory.getBean("byType", JavaBean.class);byIndex.sayHello();
JavaBean byName= beanFactory.getBean("byName", JavaBean.class);byIndex.sayHello();
2.静态工厂类StaticFactoryBean:
public class StaticFactoryBean{public static JavaBean newInstance(String message, int index){return new JavaBean(message, index);}}同上三种方式:
<bean id="factoryName" class="...../StaticFactoryBean"><bean id="byName" factory-bean="factoryName" factory-method="newInstance">
<constructor-arg name="message" value="paramValue1"/><constructor-arg name="index" value="paramValue2"/>
</bean>
3.setter注入:
传统setter方法:
JavaBean javaBean = new JavaBean();javaBean.setMessage("hello");javaBean.setIndex(1);
setter注入方式:
<bean id="beanName" class="...../JavaBean">
<!-- boolean类型的值可以用 on/off 或者 yes/no 或者 1/0 -->
<property name="message" value="Hello World!"/><property name="index">
<value>1</value>
</property>
<!-- 注入list -->
<property name="names">
<list value-type="java.lang.String" merge="default">
<!-- value-type不指定,则默认为String,merge用于父子bean关系时,是否合并list -->
<value>老王</value><value>老李</value>
<value>老张</value>
</list>
</property>
<!-- 注入set -->
<property name="values">
<set value-type="java.lang.String" merge="default">
<value>小王</value><value>大王</value><value>老王</value>
</set>
</property><!-- 注入一维数组 --><property name="arr1">
<array value-type="java.lang.String" merge="default">
<value>1</value><value>2</value><value>3</value>
</array>
</property><!-- 注入二维数组 --><property name="arr2">
<array>
<array>
<value>1</value><value>2</value>
</array>
</array><array>
<array>
<value>3</value>
<value>4</value>
</array>
</array>.........
</property><!-- 注入字典(Map)类型 --><property name="map1">
<map key-type="java.lang.String" value-type="java.lang.String">
<entry>
<key><value>name</value></key><value>老王</value>
</entry><entry key="age" value="23" />
</map>
</property><!-- 注入Properties --><property name="props">
<props value-type="int" merge="default"><!-- 这里的value-type并不起什么作用,默认String类型 -->
<prop key="name">老王</key><prop key="msg">你好!</key>
</props>
</property><!-- 还可以使用以下方法 --><property name="props">
<value>
name=老王;msg=你好!<!-- 属性分隔符可以是回车,分号,逗号 -->
</value>
</property>
</bean>参考(导航配置及以上相关简写):http://jinnianshilongnian.iteye.com/blog/1415277
// 实例化
BeanFactory beanFactory = new ClassPathXmlApplicationContext("...././constructorDependencyInject.xml");
HelloApi bean = beanFactory.getBean("bean", HelloApi.class);
bean.sayHello();
注入bean的id
<property name="id"><idref bean="bean1"/></property><property name="id"><idref local="bean2"/></property><!-- 同下 --><bean id="bean1" class="....."><bean id="idrefbean" class=".....">
<property name="id" value="bean1"></property>
</bean>
例子:
<bean id="bean1" class="......">
<constructor-arg index="0" value="test"/>
</bean><bean id="bean1" class=".....">
<property name="id">
<idref bean="bean1"/>
</property>
</bean>
阅读全文
0 0
- spring3笔记3-DI注入
- spring3学习笔记之(spring core 之DI 更多知识点(依赖检查和方法注入))
- Spring 4 学习笔记3:依赖注入(DI)
- spring 依赖注入DI-个人学习笔记
- DI注入
- 第3部分:依赖注入DI
- AngularJs学习笔记--Dependency Injection(DI,依赖注入)
- spring-DI注入(1设值注入,2构造注入,3集合注入)
- 框架 day36 Spring3 入门,DI依赖注入,装配bean基于xml/注解, 整合Junit4,配置约束自动提示
- spring(依赖注入-DI)
- Spring DI 依赖注入
- DI依赖注入
- Spring-DI(依赖注入)
- Spring依赖注入DI
- Spring 依赖注入(DI)
- Spring DI[依赖注入]
- Spring DI(依赖注入)
- Spring依赖注入(DI)
- NSPredicate 模糊查询
- UIswitch
- 精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解
- 性能怪兽!一个7倍于GoogleNet/AlexNet GPU的加速卡诞生了!
- fragment
- spring3笔记3-DI注入
- 自动定时刷新页面
- Netty学习笔记13——一些问题记录处理
- 移动硬盘 使用驱动器X:中的光盘之前需要将其格式化 的 解决办法
- FastReport应用问题
- 最近get到的小知识(未完待续)
- jvm调优--查找最耗CPU的代码
- 在Android Studio上查看代码总行数
- 动态数组打印杨辉三角