Я запутался между атрибутом ref и зависимым от Spring. Я читаю документ spring, но я все еще запутался. Я хочу знать точную разницу между ними и в каком случае, какой из них будет использоваться.
Ref vs зависит от атрибутов в Spring
Ответ 1
Согласно spring документации
Если вам нужно выразить зависимость от нескольких beans, вы можете предоставить список имен bean в качестве значения атрибута "зависит от" , с запятыми, пробелами и точками с запятой все допустимые разделители, например
<bean id="beanOne" class="ExampleBean" depends-on="manager,accountDao">
<property name="manager" ref="manager" />
</bean>
<bean id="manager" class="ManagerBean" />
<bean id="accountDao" class="x.y.jdbc.JdbcAccountDao" />
Атрибут и свойство "зависит от" используется не только для определения зависимости времени инициализации, но также для указания соответствующей зависимости времени от времени уничтожения (только для singleton beans). Зависимые beans, которые определены в атрибуте "зависит от" , будут уничтожены сначала до того, как будет уничтожен соответствующий bean. Таким образом, вы также можете контролировать порядок выключения.
С другой стороны, для большинства ситуаций факт, что a bean является зависимостью другого, выражается тем фактом, что один bean задается как свойство другого. Обычно это выполняется с помощью элемента в метаданных конфигурации на основе XML.
<bean id="a" class="ClassA"/>
<bean id="b" class="ClassB">
<property name="aref" ref="a" />
</bean>
Ответ 2
Кроме того, http://docs.spring.io/spring/docs/3.2.x/javadoc-api/org/springframework/context/annotation/DependsOn.html
Зависит от → Beans, от которого зависит текущий bean. Любой Beans, указанный, должен быть создан контейнером до этого bean. Используется нечасто в тех случаях, когда bean явно не зависит от другого через свойства или аргументы конструктора, а зависит от побочных эффектов другой инициализации bean.
В приведенном выше ответе приведенное ниже утверждение неверно,
"Зависимый Beans, который определен в атрибуте" зависит от ", будет уничтожен первым до того, как будет уничтожен соответствующий bean"
Основной bean будет уничтожен первым, а затем будет уничтожен зависимый Beans.
Вот мой результат теста,
уничтожается главный класс.
Вызывается уничтожение зависимого.
Ответ 3
Возможно, пример ситуации, в которой зависит от необходимости, поможет. Я использую Spring для загрузки и подключения моего beans. Ниже приведен пример определения bean:
<bean id="myBean" class="my.package.Class">
<property name="destination" value="bean:otherBeanId?method=doSomething"/>
</bean>
<bean id="otherBeanId" class="my.package.OtherClass"/>
Обратите внимание, что значение свойства представляет собой строку, которая ссылается на otherBeanId. Из-за того, как эта переменная разрешена, Spring не узнает об этой зависимости, поэтому она может уничтожить otherBeanId, затем myBean. Это может оставить myBean в сломанном состоянии на некоторое время.
Я могу использовать, чтобы исправить эту проблему следующим образом:
<bean id="myBean" class="my.package.Class" depends-on="otherBeanId">
<property name="destination" value="bean:otherBeanId?method=doSomething"/>
</bean>