spring依赖注入,自动转配
来源:互联网 发布:音乐巅峰知乎 编辑:程序博客网 时间:2024/06/11 20:19
依赖注入的方式:属性注入,构造器注入,工厂注入
package cn.et.demo1;
public class A {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package cn.et.demo1;
public class B {
private A a;
public A getA() {
return a;
}
public void setA(A a) {
this.a = a;
}
}
1)属性注入:
<!-- id:类实例的名字 class:类的路径,包名.类名-->
<bean id="a" class="cn.et.demo1.A">
<!-- 给类中的属性赋值,name:属性名, value:赋给属性的值 -->
<property name="name" value="ssg"></property>
<!-- 等同
<property name="name" >
<value>ssg</value>
</property>
-->
</bean>
<bean id="b" class="cn.et.demo1.B"></bean>
<!-- 给类中的类属性赋值 -->
<bean id="bb" class="cn.et.demo1.B" >
<!-- ref:类对象 value:基本类型的值,数字,字符等 -->
<property name="a" ref="a"></property>
<!-- 等同
<property name="a">
<ref bean="a"/>
</property>
-->
</bean>
2)构造器注入:
package cn.et.demo2;
public class D {
private C c;
private String id;
private String name;
public D(C c, String id, String name) {
super();
this.c = c;
this.id = id;
this.name = name;
}
public C getC() {
return c;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
}
package cn.et.demo2;
public class C {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
<bean id="c" class="cn.et.demo2.C">
<property name="name" value="aa"></property>
</bean>
<!-- 构造器注入 -->
<bean id="d" class="cn.et.demo2.D">
<!-- 给构造器的属性赋值 -->
<!-- 根据构造器中的参数索引来赋值,索引从0开始,赋值顺序不能变
<constructor-arg index="0" value="1"></constructor-arg>
<constructor-arg index="1" value="ssg"></constructor-arg>
<constructor-arg index="2" ref="c"></constructor-arg>
-->
<!-- 根据构造器中的参数名来赋值 -->
<constructor-arg name="id" value="1"></constructor-arg>
<constructor-arg name="name" value="ssg"></constructor-arg>
<constructor-arg name="c" ref="c"></constructor-arg>
<!-- 根据构造器中参数的类型赋值,可以根据参数类型的不同打乱顺序赋值,但同一类型的参数不能打乱顺序赋值
<constructor-arg type="java.lang.String" value="ssg"></constructor-arg>
<constructor-arg type="cn.et.demo2.C" ref="c"></constructor-arg>
<constructor-arg type="java.lang.String" value="1"></constructor-arg>
-->
</bean>
自动装配:
java类:A,B
<!--
自动转配:autowire
1) autowire="byType" 根据类型,自动导入需要的类属性,如果定义的类属性是单个,导入的类属性有>=2个类实例,报错
如果定义的类属性是集合,导入的类属性有>=2个类实例没问题
2) autowire="byName" 根据类中定义的类属性的名字,如果bean中有>=2的类属性的实例,报错
-->
<bean id="b" class="cn.et.demo3.B" autowire="byName"></bean>
package cn.et.demo1;
public class A {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package cn.et.demo1;
public class B {
private A a;
public A getA() {
return a;
}
public void setA(A a) {
this.a = a;
}
}
1)属性注入:
<!-- id:类实例的名字 class:类的路径,包名.类名-->
<bean id="a" class="cn.et.demo1.A">
<!-- 给类中的属性赋值,name:属性名, value:赋给属性的值 -->
<property name="name" value="ssg"></property>
<!-- 等同
<property name="name" >
<value>ssg</value>
</property>
-->
</bean>
<bean id="b" class="cn.et.demo1.B"></bean>
<!-- 给类中的类属性赋值 -->
<bean id="bb" class="cn.et.demo1.B" >
<!-- ref:类对象 value:基本类型的值,数字,字符等 -->
<property name="a" ref="a"></property>
<!-- 等同
<property name="a">
<ref bean="a"/>
</property>
-->
</bean>
2)构造器注入:
package cn.et.demo2;
public class D {
private C c;
private String id;
private String name;
public D(C c, String id, String name) {
super();
this.c = c;
this.id = id;
this.name = name;
}
public C getC() {
return c;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
}
package cn.et.demo2;
public class C {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
<bean id="c" class="cn.et.demo2.C">
<property name="name" value="aa"></property>
</bean>
<!-- 构造器注入 -->
<bean id="d" class="cn.et.demo2.D">
<!-- 给构造器的属性赋值 -->
<!-- 根据构造器中的参数索引来赋值,索引从0开始,赋值顺序不能变
<constructor-arg index="0" value="1"></constructor-arg>
<constructor-arg index="1" value="ssg"></constructor-arg>
<constructor-arg index="2" ref="c"></constructor-arg>
-->
<!-- 根据构造器中的参数名来赋值 -->
<constructor-arg name="id" value="1"></constructor-arg>
<constructor-arg name="name" value="ssg"></constructor-arg>
<constructor-arg name="c" ref="c"></constructor-arg>
<!-- 根据构造器中参数的类型赋值,可以根据参数类型的不同打乱顺序赋值,但同一类型的参数不能打乱顺序赋值
<constructor-arg type="java.lang.String" value="ssg"></constructor-arg>
<constructor-arg type="cn.et.demo2.C" ref="c"></constructor-arg>
<constructor-arg type="java.lang.String" value="1"></constructor-arg>
-->
</bean>
自动装配:
java类:A,B
<!--
自动转配:autowire
1) autowire="byType" 根据类型,自动导入需要的类属性,如果定义的类属性是单个,导入的类属性有>=2个类实例,报错
如果定义的类属性是集合,导入的类属性有>=2个类实例没问题
2) autowire="byName" 根据类中定义的类属性的名字,如果bean中有>=2的类属性的实例,报错
-->
<bean id="b" class="cn.et.demo3.B" autowire="byName"></bean>
阅读全文
0 0
- spring依赖注入,自动转配
- spring 自动依赖注入
- Spring 自动注入依赖
- Spring 自动依赖注入
- Spring依赖注入,自动扫描组件,自动装配,注解注入
- Spring如何实现自动依赖注入-------autowire
- Spring依赖注入 — 属性自动装配
- Spring依赖注入 — 属性自动装配
- Spring自动扫面和依赖注入
- Spring如何实现自动依赖注入-------autowire
- Spring如何实现自动依赖注入-------autowire
- Spring如何实现自动依赖注入-------autowire
- Spring如何实现自动依赖注入-------autowire
- Spring 自动依赖注入优化(primary)
- Spring 自动依赖注入优化(qualifier)
- Spring 自动依赖注入优化(autowire-candidate)
- Spring DI依赖注入,自动装配
- Spring 依赖注入:自动注入properties文件中的配置
- XML几种解析方式以及其试用场景
- Jdk动态代理简单实现
- Docker学习系列从零开始之启动镜像和进入相应的镜像【三】
- s s m 整合
- ZTree简单粗暴快速使用
- spring依赖注入,自动转配
- angularjs中,ui-sref传递参数
- Shell API
- 已知先序后序遍历找n种二叉树问题
- Linux服务器无故挂了PHP
- 使用webpack打包编写一个vue插件
- JS控制
- Power-BI 大数据分析软件For 金蝶用友标准BI解决方案 -客户销售预警分析
- 服务器经常挂掉的6个原因