基于Spring depends-on的使用详解

 更新时间:2021年07月22日 17:16:36   作者:王哲晓  
这篇文章主要介绍了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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解Java 中程序内存的分析

    详解Java 中程序内存的分析

    这篇文章主要介绍了详解Java 中程序内存的分析的相关资料,需要的朋友可以参考下
    2017-04-04
  • Spring中@Autowired与@Resource的区别详析

    Spring中@Autowired与@Resource的区别详析

    @Autowired与@Resource都可以用来装配bean,都可以写在字段上,或写在setter方法上,下面这篇文章主要给大家介绍了关于Spring中@Autowired与@Resource区别的相关资料,需要的朋友可以参考下
    2021-10-10
  • 以Java代码的方式总结几个典型的内存溢出案例

    以Java代码的方式总结几个典型的内存溢出案例

    作为程序员,多多少少都会遇到一些内存溢出的场景,如果你还没遇到,说明你工作的年限可能比较短,或者你根本就是个假程序员!哈哈,开个玩笑.今天分享给大家Java内存溢出的相关案例,希望大家在日常工作中,尽量避免写这些low水平的代码,需要的朋友可以参考下
    2021-06-06
  • Java Stream API详解与使用示例详解

    Java Stream API详解与使用示例详解

    Java Stream API 是一个功能强大的工具,适用于处理集合和数据流,本文全面介绍了 Java Stream API 的概念、功能以及如何在 Java 中有效地使用它进行集合和数据流的处理,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • Java几个实例带你进阶升华上篇

    Java几个实例带你进阶升华上篇

    与其明天开始,不如现在行动,本文为你带来几个Java书写的实际案例,对巩固编程的基础能力很有帮助,快来一起往下看看吧
    2022-03-03
  • Spring AOP详解面向切面编程思想

    Spring AOP详解面向切面编程思想

    Spring是一个广泛应用的框架,SpringAOP则是Spring提供的一个标准易用的aop框架,依托Spring的IOC容器,提供了极强的AOP扩展增强能力,对项目开发提供了极大地便利
    2022-06-06
  • java Date和SimpleDateFormat时间类详解

    java Date和SimpleDateFormat时间类详解

    这篇文章主要介绍了java Date和SimpleDateFormat时间类详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • 解决JavaWeb读取本地json文件以及乱码的问题

    解决JavaWeb读取本地json文件以及乱码的问题

    今天小编就为大家分享一篇解决JavaWeb读取本地json文件以及乱码的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • 详解如何在Spring Boot中实现容错机制

    详解如何在Spring Boot中实现容错机制

    容错机制是构建健壮和可靠的应用程序的重要组成部分,它可以帮助应用程序在面对异常或故障时保持稳定运行,Spring Boot提供了多种机制来实现容错,包括异常处理、断路器、重试和降级等,本文将介绍如何在Spring Boot中实现这些容错机制,需要的朋友可以参考下
    2023-10-10
  • java中String.matches方法使用

    java中String.matches方法使用

    String.matches()方法用于检测字符串是否符合特定的正则表达式,详细介绍了如何使用String.matches()配合不同的正则表达式来匹配各种特定格式的字符串,感兴趣的可以了解一下
    2024-09-09

最新评论