基于Spring depends-on的使用详解
作者:王哲晓 发布时间:2021-09-29 16:23:20
标签:Spring,depends-on
Spring depends-on的使用
通过在XML中的<bean>里配置depends-on属性或者在一个类上使用注解@DependsOn,可以使一个Bean的产生依赖于其他几个Bean。
请看如下代码:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="son" class="com.tyyd.lifecallbacks.domain.Son" depends-on="mother"></bean>
<bean id="mother" class="com.tyyd.lifecallbacks.domain.Mother"></bean>
</beans>
son这个Bean的产生依赖于mother这个Bean。
Spring Depends-On 不起作用
beans-realation.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
<!-- abstract="true" 则不能获得这个bean 说明它只是一个模板,只能被继承 -->
<bean id = "address" class="com.yuxishua.autowire.Address" p:city="Beijing" p:street="ChangAnLu" abstract="true">
</bean>
<!-- 继承bean的配置使用parent 属性,但是没有java 继承的意思 -->
<bean id = "address2" parent="address" p:street="HanSenLU">
</bean>
<!-- 要求person bean 必须有一个关联的car ,意思就是说这个bean依赖car这个bean -->
<bean id = "person" depends-on="car" class="com.yuxishua.autowire.Person" p:name="Tom" p:address-ref="address2" >
</bean>
<bean id = "car" class="com.yuxishua.autowire.Car" p:brand="AuDi" p:price="30000">
</bean>
</beans>
package com.yuxishua.beansrelation;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.yuxishua.autowire.Address;
import com.yuxishua.autowire.Car;
import com.yuxishua.autowire.Person;
public class Main
{
public static void main(String[] args)
{
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-realation.xml");
Person person = (Person) ctx.getBean("person");
Address address2 = (Address) ctx.getBean("address2");
Car car = (Car) ctx.getBean("car");
System.out.println(address2 );
System.out.println(person);
System.out.println(car);
}
}
package com.yuxishua.autowire;
public class Person
{
private String name;
private Address address;
private Car car;
@Override
public String toString()
{
return "Person [name=" + name + ", address=" + address + ", car=" + car
+ "]";
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public Address getAddress()
{
return address;
}
public void setAddress(Address address)
{
this.address = address;
}
public Car getCar()
{
return car;
}
public void setCar(Car car)
{
this.car = car;
}
}
package com.yuxishua.autowire;
public class Car
{
private String brand;
private double price;
public String getBrand()
{
return brand;
}
public void setBrand(String brand)
{
this.brand = brand;
}
public double getPrice()
{
return price;
}
public void setPrice(double price)
{
this.price = price;
}
@Override
public String toString()
{
return "Car [brand=" + brand + ", price=" + price + "]";
}
}
package com.yuxishua.autowire;
public class Address
{
private String city;
private String street;
@Override
public String toString()
{
return "Address [city=" + city + ", street=" + street + "]";
}
public String getCity()
{
return city;
}
public void setCity(String city)
{
this.city = city;
}
public String getStreet()
{
return street;
}
public void setStreet(String street)
{
this.street = street;
}
}
就上面的代码,结果输出
Person [name=Tom, address=Address [city=Beijing, street=HanSenLU], car=null]
car 为什么没有注入呢,是spring版本的问题吗?还是什么原因?
spring为4.0.8
来源:https://blog.csdn.net/qushaming/article/details/102605829
0
投稿
猜你喜欢
- JDK提供的流继承了四大类:InputStream(字节输入流)、OutputStream(字节输出流)、Reader(字符输入流)、Wri
- 一、@Value读取application.properties配置文件中的值application.properties配置文件fileN
- 一、定义登录控制器目录结构代码:1、创建TUser类package com.demo.pojo;import lombok.AllArgsC
- 介绍:上篇给大家介绍了ssm多模块项目的搭建,在搭建过程中spring整合springmvc和mybatis时会有很多的东西需要我们进行配置
- 限流背景在早期的计算机领域,限流技术(time limiting)被用做控制网络接口收发通信数据的速率。可以用来优化性能,减少延迟和提高带宽
- Spring Boot 的启动原理可以概括为以下几个步骤:加载 Spring Boot 应用程序的启动类根据启动类所在的包路径扫描相关的类根
- 1、说明isInterrupted()可以判断当前线程是否被中断,仅仅是对interrupt()标识的一个判断,并不会影响标识发生任何改变(
- 本文实例为大家分享了java生成验证码图片的具体代码,供大家参考,具体内容如下示例一:import org.apache.commons.c
- spring mvc @PathVariable / 带斜杠方式获取遇上这个问题,百度google了一下,抄袭里面的内容,可以实现,在此备忘
- 前言:好久没有写博客,最近一年感觉真是好忙,各种做不完的工作。相信很多上班族都会有这种感觉。最近对NFC进行写卡操作,需要计算一个校验位。一
- 本文实例讲述了Java实现的zip工具类。分享给大家供大家参考,具体如下:实现把zip解压到指定路径,把文件夹压缩到zip,把文件列表压缩为
- 在Java里面,可以用复制语句”A=B”给基本类型的数
- 本文实例为大家分享了java实现简单石头剪刀布游戏的具体代码,供大家参考,具体内容如下问题描述Alice, Bob和Cindy一起玩猜拳的游
- 本文实例讲述了Java操作Mongodb数据库实现数据的增删查改功能。分享给大家供大家参考,具体如下:首先,我们在windows下安装mon
- Feign调用中的两种Header传参方式在Spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,
- Android 自动获取验证码的两种方式分别是BroadcastReceiver及ContentObserver,两种方式都需要进行注册、取
- 本文实例为大家分享了Java实现简单贪吃蛇游戏的具体代码,供大家参考,具体内容如下贪吃蛇小游戏制作方法首先需要的准备有:1、掌握Java基础
- 在使用springMVC框架构建web应用,客户端常会请求字符串、整型、json等格式的数据,通常使用@ResponseBody注解使 co
- 1.情景展示java发送get请求、post请求(form表单、json数据)至另一服务器;可设置HTTP请求头部信息,可以接收服务器返回c
- 引言你在服务端的安全管理使用了 Spring Security,用户登录成功之后,Spring Security 帮你把用户信息保存在 Se