Spring依赖注入的方式

Spring支持3中依赖注入的方式

1.属性注入
属性注入即通过setter方法注入Bean的属性值或依赖的对象
属性注入使用<property>元素,使用name属性指定Bean的属性名称,value属性或<value>子节点指定属性值
属性注入是实际应用中最常用的注入方式
	<bean id="a" class="cn.et.A">
		<property name="name" value="张三"></property>
		<property name="age" value="18"></property>
	</bean>
	<bean  id="b" class="cn.et.B">
		<property name="a" ref="a"></property>
	</bean>
例:
public static void main(String[] args) {
	//创建spring的IOC容器
	FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("classpath:spring.xml");
	//从IOC容器中获取bean的实例   通过bean的名称获取bean的实例
	A a = (A)context.getBean("a");
	System.out.println(a.getName()+"   "+a.getAge());
	B b = (B)context.getBean("b");
	System.out.println(b.getA().getName()+"   "+b.getA().getAge());
}
结果

2.构造方法注入
通过构造方法注入Bean的属性值或依赖的对象,它保证了Bean实例在实例化就可以使用。
构造器注入在<constructor-arg>元素里声明属性,
<constructor-arg>中没有name属性

按索引入参
	<bean id="c" class="cn.et.C">
		<constructor-arg index="0" value="1"></constructor-arg>
		<constructor-arg index="1" value="ls"></constructor-arg>
		<constructor-arg index="2" ref="b"></constructor-arg>
	</bean>
根据名字入参
	<bean id="c" class="cn.et.C">
		<constructor-arg name="id" value="1"></constructor-arg>
		<constructor-arg name="name" value="ls"></constructor-arg>
		<constructor-arg name="b" ref="b"></constructor-arg>
	</bean>
还可根据类型入参,不推荐使用,建议用名字入参


XML配置里的Bean自动装配
Spring IOC 容器可以自动装配Bean。需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式
byType(根据类型自动装配):对象属性所在的类 在容器中 只能拥有一个实例(多个实例是相对的,如果对象中的属性是集合,可以装配多个List里的对象)
byName(根据名称自动装配):根据当前对象属性的名称来查找对应的实例
constructor(通过构造器自动装配):当Bean中存在多个构造器时,此种自动装配方式将会很复杂。不推荐使用

XML配置里的Bean自动装配的缺点
在Bean配置文件里设置autowire属性进行自动装配将会装配Bean的所有属性,然而,若只希望装配个别属性时,autowire属性就不够灵活了。
autowire属性要么根据类型自动装配,要么根据名称自动装配,不能两者兼而有之。
一般情况下,在实际的项目中很少使用自动装配功能,因为和自动装配功能所带来的好处比起来,明确清晰的配置文档更有说服力一些。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值