depends-on的用法

本文探讨了Spring框架中depends-on属性的使用场景与本质,通过具体示例解释了不同依赖关系下如何选择构造器注入或setter注入,并分析了depends-on属性在不同情况下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

纸上得来终觉浅

首先要了解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:上述均已验证

ERROR: Cannot install basicsr==1.3.1, basicsr==1.3.2, basicsr==1.3.3, basicsr==1.3.3.1, basicsr==1.3.3.10, basicsr==1.3.3.11, basicsr==1.3.3.3, basicsr==1.3.3.4, basicsr==1.3.3.5, basicsr==1.3.3.6, basicsr==1.3.3.7, basicsr==1.3.3.8, basicsr==1.3.3.9, basicsr==1.3.4.0, basicsr==1.3.4.1, basicsr==1.3.4.2, basicsr==1.3.4.3, basicsr==1.3.4.4, basicsr==1.3.4.6, basicsr==1.3.4.7, basicsr==1.3.4.8, basicsr==1.3.4.9, basicsr==1.3.5, basicsr==1.4.0, basicsr==1.4.1 and basicsr==1.4.2 because these package versions have conflicting dependencies. The conflict is caused by: basicsr 1.4.2 depends on tb-nightly basicsr 1.4.1 depends on tb-nightly basicsr 1.4.0 depends on tb-nightly basicsr 1.3.5 depends on tb-nightly basicsr 1.3.4.9 depends on tb-nightly basicsr 1.3.4.8 depends on tb-nightly basicsr 1.3.4.7 depends on tb-nightly basicsr 1.3.4.6 depends on tb-nightly basicsr 1.3.4.4 depends on tb-nightly basicsr 1.3.4.3 depends on tb-nightly basicsr 1.3.4.2 depends on tb-nightly basicsr 1.3.4.1 depends on tb-nightly basicsr 1.3.4.0 depends on tb-nightly basicsr 1.3.3.11 depends on tb-nightly basicsr 1.3.3.10 depends on tb-nightly basicsr 1.3.3.9 depends on tb-nightly basicsr 1.3.3.8 depends on tb-nightly basicsr 1.3.3.7 depends on tb-nightly basicsr 1.3.3.6 depends on tb-nightly basicsr 1.3.3.5 depends on tb-nightly basicsr 1.3.3.4 depends on tb-nightly basicsr 1.3.3.3 depends on tb-nightly basicsr 1.3.3.1 depends on tb-nightly basicsr 1.3.3 depends on tb-nightly basicsr 1.3.2 depends on tb-nightly basicsr 1.3.1 depends on tb-nightly To fix this you could try to: 1. loosen the range of package versions you've specified 2. remove package versions to allow pip attempt to solve the dependency conflict ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts
03-12
报错ERROR: Cannot install smolagents because these package versions have conflicting dependencies. The conflict is caused by: mlx-lm 0.22.0 depends on mlx>=0.22.0 mlx-lm 0.21.5 depends on mlx>=0.22.0 mlx-lm 0.21.4 depends on mlx>=0.22.0 mlx-lm 0.21.3 depends on mlx>=0.22.0 mlx-lm 0.21.2 depends on mlx>=0.22.0 mlx-lm 0.21.1 depends on mlx>=0.22.0 mlx-lm 0.21.0 depends on mlx>=0.22.0 mlx-lm 0.20.6 depends on mlx>=0.19.2 mlx-lm 0.20.5 depends on mlx>=0.19.2 mlx-lm 0.20.4 depends on mlx>=0.19.2 mlx-lm 0.20.3 depends on mlx>=0.19.2 mlx-lm 0.20.2 depends on mlx>=0.19.2 mlx-lm 0.20.1 depends on mlx>=0.19.2 mlx-lm 0.19.3 depends on mlx>=0.19.2 mlx-lm 0.19.2 depends on mlx>=0.17.0 mlx-lm 0.19.1 depends on mlx>=0.17.0 mlx-lm 0.19.0 depends on mlx>=0.17.0 mlx-lm 0.18.2 depends on mlx>=0.17.0 mlx-lm 0.18.1 depends on mlx>=0.17.0 mlx-lm 0.17.1 depends on mlx>=0.17.0 mlx-lm 0.17.0 depends on mlx>=0.14.1 mlx-lm 0.16.1 depends on mlx>=0.14.1 mlx-lm 0.16.0 depends on mlx>=0.14.1 mlx-lm 0.15.3 depends on mlx>=0.14.1 mlx-lm 0.15.2 depends on mlx>=0.14.1 mlx-lm 0.15.1 depends on mlx>=0.14.1 mlx-lm 0.15.0 depends on mlx>=0.14.1 mlx-lm 0.14.3 depends on mlx>=0.14.1 mlx-lm 0.14.2 depends on mlx>=0.14.1 mlx-lm 0.14.1 depends on mlx>=0.14.1 mlx-lm 0.14.0 depends on mlx>=0.14 mlx-lm 0.13.1 depends on mlx>=0.11 mlx-lm 0.13.0 depends on mlx>=0.11 mlx-lm 0.12.1 depends on mlx>=0.11 mlx-lm 0.12.0 depends on mlx>=0.11 mlx-lm 0.11.0 depends on mlx>=0.11 mlx-lm 0.10.0 depends on mlx>=0.11 mlx-lm 0.9.0 depends on mlx>=0.10 mlx-lm 0.8.0 depends on mlx>=0.8 mlx-lm 0.7.0 depends on mlx>=0.8 mlx-lm 0.6.0 depends on mlx>=0.8 mlx-lm 0.5.0 depends on mlx>=0.8 mlx-lm 0.4.0 depends on mlx>=0.6 mlx-lm 0.3.0 depends on mlx>=0.6 mlx-lm 0.2.0 depends on mlx>=0.6 mlx-lm 0.1.0 depends on mlx>=0.6 mlx-lm 0.0.14 depends on mlx>=0.4
03-18
dpkg: dependency problems prevent configuration of libgtk2.0-dev: libgtk2.0-dev depends on libgtk2.0-0 (= 2.24.30-1ubuntu1); however: Package libgtk2.0-0:amd64 is not installed. libgtk2.0-dev depends on gir1.2-gtk-2.0 (= 2.24.30-1ubuntu1); however: Package gir1.2-gtk-2.0 is not installed. libgtk2.0-dev depends on libgtk2.0-common; however: Package libgtk2.0-common is not installed. libgtk2.0-dev depends on libglib2.0-dev (>= 2.27.3); however: Package libglib2.0-dev is not installed. libgtk2.0-dev depends on libgdk-pixbuf2.0-dev (>= 2.21.0); however: Package libgdk-pixbuf2.0-dev is not installed. libgtk2.0-dev depends on libpango1.0-dev (>= 1.20); however: Package libpango1.0-dev is not installed. libgtk2.0-dev depends on libatk1.0-dev (>= 1.29.2); however: Package libatk1.0-dev is not installed. libgtk2.0-dev depends on libcairo2-dev (>= 1.6.4-6.1); however: Package libcairo2-dev is not installed. libgtk2.0-dev depends on libx11-dev (>= 2:1.0.0-6); however: Package libx11-dev is not installed. libgtk2.0-dev depends on libxext-dev (>= 1:1.0.1-2); however: Package libxext-dev is not installed. libgtk2.0-dev depends on libxinerama-dev (>= 1:1.0.1-4.1); however: Package libxinerama-dev is not installed. libgtk2.0-dev depends on libxi-dev (>= 1:1.0.1-4); however: Package libxi-dev is not installed. libgtk2.0-dev depends on libxrandr-dev (>= 2:1.2.99); however: Package libxrandr-dev is not installed. libgtk2.0-dev depends on libxcursor-dev; however: Package libxcursor-dev is not installed. libgtk2.0-dev depends on libxfixes-dev (>= 1:3.0.0-3); however: Package libxfixes-dev is not installed. libgtk2.0-dev depends on libxcomposite-dev (>= 1:0.2.0-3); however: Package libxcomposite-dev is not installed. libgtk2.0-dev depends on libxdamage-dev (>= 1:1.0.1-3); however: Package libxdamage-dev is not installed. libgtk2.0-dev depends on pkg-config (>= 0.26-1); however: Package pkg-config is not installed. libgtk2.0-dev depen
03-14
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值