Spring 依赖注入

依赖注入

依赖注入属于IoC。

五种关系:继承、依赖、关联、聚合、组合

当创建User对象时,(dept对象不能为空),如何自动的创建Dept并将其赋给dept。

*依赖注入需要IoC的环境,依赖的双方必须全部交给Spring管理。

1 基于xml的依赖注入

1.1简单类型的属性的依赖注入

1.1.1 构造方法注入

① 需要重载构造方法,一般开发中需要保留默认构造

<bean id="user" class="com.pojo.User">
		<!-- 
			为构造方法指定参数的值
			index:指定构造方法中参数的索引
			value:用于简单参数的赋值
			name:和index在同一个constructor-arg中出现一个就可以了,表示形参的参数名称
			ref:如果参数为引用类型的参数,赋值时使用ref
			type:用于指定参数的类型,当形参数量以及名称相同时,指定该参数的数据类型
		 -->
		<constructor-arg index="0" value="100"></constructor-arg>
		<constructor-arg name="pwd" value="pwd"></constructor-arg>
		<constructor-arg index="1" value="add"></constructor-arg>
</bean>
1.1.2 setter方法注入【推荐使用】

与get方法无关。

① 必须有公有的set方法

② 需要用property标签 对set方法进行注入

	<bean id="user" class="com.pojo.User">
		<!-- 
			name:指定属性的名称(需要有set方法)
			value:指定属性的值
			ref:如果参数为引用类型的参数,赋值时使用ref
		 -->
		<property name="id"></property>
	</bean>
1.1.3 P命名空间注入

① 需要引入一个命名空间

xmlns:p="http://www.springframework.org/schema/p"

② 在bean属性中使用p属性

<bean id="user" class="com.pojo.User" p:id="123" p:name="name"></bean>
1.1.4 SPEL表达式注入

spel指的就是spring 表达语言的简写。

#{常量}
#{变量}
#{表达式}
<bean id="user" class="com.pojo.User" p:id="#{user2.id}"></bean>
<bean id="user" class="com.pojo.User" p:id=""></bean>

1.2 引用数据类型的依赖注入

value是用于简单类型的属性的依赖注入,ref引用地址(我们在标签中定义的id或name)

① 在getBean() 的时候才会进行依赖注入。在创建对象时不会依赖注入。

② 在进行懒加载时,就会先进行依赖注入

1.3 其他类型的依赖注入

用于整合第三方架构时,需要向第三方架构提供的对象中注入值。均使用set方法注入。

1.3.1 Map类型的注入
	<bean id="user" class="com.pojo.User">
		<property name="map">
			<map>
				<entry key="key1" value="10"></entry>
				<entry key="key2" value-ref="引用数据类型"></entry>
				<entry key-ref="引用数据类型" value="100"></entry>
			</map>
		</property>
	</bean>
1.3.2 List类型的注入
	<bean id="user" class="com.pojo.User">
		<property name="list">
			<list>
				<value>1</value>
				<bean class="com.pojo.dept"></bean>
			</list>
		</property>
	</bean>
1.3.3 Set类型的注入

除了标签不同与list集合基本相同。

1.3.4 properties类型的注入

2 基于注解的依赖注入

依赖的双方可以分别使用xml或注解。

@Autowired

按类型注入,回去容器找对应类型

//当容器没有找到该类型时,required属性为true时则报错,为false时则值为默认
//如果
@Autowired(required = true)
private dept dept;

@Resource

按名称注入,会去容器中找name或id叫dept的bean。如果该属性名称注入失败,则按照类型进行注入。

//按名称注入,会去容器中找name或id叫dept的bean
@Resource(name = "dept")
private dept dept;

组合注解

基本少用。

简单类型的属性注入

@value(123)

写在简单类型上。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值