depends-on的用法

纸上得来终觉浅

首先要了解depends-on用来表示一个bean A的实例化依靠另一个bean B的实例化, 但是A并不需要持有一个B的对象,如果需要的话就不用depends-on,直接用依赖注入就可以了。

1)depends-on使用实例

public class person {
	public static void say(){
		System.out.println("person.say():Im a person");
	}
}


public class man {
	private String name;
	public void setName(String name) {
		this.name = name;
	}
	public void say(){
		person.say();
		System.out.println("man.say():Im a man:"+name);
	}
}

<bean id="person" class="com.roadArchitectWeb.dao.person">
</bean>
<bean id="man" class="com.roadArchitectWeb.dao.man" depends-on="person">
<property name="name" value="zhangsan"></property>
</bean>

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		man man = (man)ctx.getBean("man");
		man.say();

打印结果:

person.say():Im a person
man.say():Im a man:zhangsan

2) 讨论depends-on本质问题,当使用depends-on时,它会对它指向的bean进行一个实例化请求;明确这一点后,我们看下面几条

3)如果A既依赖于B,而A又需要持有B的实例,那么使用构造器注入就可以了。

因为构造器注入,如果参数没有实例化,构造函数无法执行,这就满足了依赖关系;然后再进行注入,这就满足了持有B实例的条件。  同时,这个时候不能再使用depends-on,如果bean B是singleton模式的话可以,用depends-on只是多此一举,如果非singleton的话,就会产生两次实例化请求,两次实例化,这可能不是你想要的。

4)同样是如果A既依赖于B,而A又需要持有B的实例,那么也可以使用setter方式注入。 

因为setter在注入时,A已经实例化,所以不能实现对B依赖关系,这个时候就要加上depends-on, 但是bean  B必须是singleton模式,否则也会产生两次实例化。

5)如果A不依赖于B,但是需要B的实例,单单使用setter就好了。

PS:上述均已验证

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值