加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

spring之bean之间的关系

发布时间:2020-12-15 01:13:20 所属栏目:大数据 来源:网络整理
导读:两种关系:继承、依赖 一、继承关系 Address.java package com.gong.spring.beans.autowire; public class Address { private String city; String street; public String getCity() { return city; } void setCity(String city) { this .city = String getS

两种关系:继承、依赖

一、继承关系

Address.java

package com.gong.spring.beans.autowire;

public class Address {
    private String city;
     String street;
    
    public String getCity() {
        return city;
    }

    void setCity(String city) {
        this.city = String getStreet() {
         street;
    }

     setStreet(String street) {
        this.street = street;
    }

    @Override
     String toString() {
        return "Address [city=" + city + ",street=" + street + "]";
    }

    
}

beans-relation.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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="address" class="com.gong.spring.beans.autowire.Address" 
    p:city="武汉" p:street="络南街道"></bean>
    <!-- 使用parent指定指定哪个bean的配置,子bean可以覆盖父bean的配置 -->
    <bean id="address2" class="com.gong.spring.beans.autowire.Address" parent="address" 
    p:street="珞狮街道"></bean>
</beans>

Main.java

import org.springframework.context.ApplicationContext;
 org.springframework.context.support.ClassPathXmlApplicationContext;

 Main {
    static  main(String[] args) {
        //1.创建spring的IOC容器对象
        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-relation.xml");
        2.从容器中获取Bean实例
        Address address = (Address) ctx.getBean("address"); 
        System.out.println(address.toString());
        Address address2 = (Address) ctx.getBean("address2"); 
        System.out.println(address2.toString());
    }
}

输出:

address2继承了address的city配置,因此city=武汉。

当然,我们也可以使用abstract来表明一个Bean是一个抽象bean。抽象bean可以作为一个模板,且不能被实例化。同时,如果一个bean没有声明class,那么该bean也是一个抽象bean,且必须指定abstract="true"。

<bean id="address" class="com.gong.spring.beans.autowire.Address" abstract="true"
    p:city="武汉" p:street="络南街道"></bean>

此时,在进行实例化就会报错

Address address = (Address) ctx.getBean("address"); 

将抽象bean作为父bean,可以实例化它的子bean:

    Address address2 = (Address) ctx.getBean("address2"); 
    System.out.println(address2.toString());

二、依赖关系

Car.java

 Car {
    
     Car() {
    }

     Car(String name) {
        this.name = name;
    }
     String name;

     String getName() {
         name;
    }

     setName(String name) {
         name;
    }

    @Override
    return "Car [name=" + name + "]";
    }
    
}

Student.java

 com.gong.spring.beans.autowire;
 java.util.List;
 java.util.Map;

 Student {
    
     String name;
    private int age;
    double score;
     Car car;
     Address address;
     getAge() {
         age;
    }
    void setAge( age) {
        this.age = getScore() {
         score;
    }
    void setScore( score) {
        this.score = Car getCar() {
         car;
    }
     setCar(Car car) {
        this.car = Address getAddress() {
         address;
    }
     setAddress(Address address) {
        this.address = address;
    }
    @Override
    return "Student [name=" + name + ",age=" + age + ",score=" + score + ",car=" + car + ",address=" + address
                + "]";
    }
    
    
}

beans-relation.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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    bean id="car" class="com.gong.spring.beans.autowire.Car" p:name="baoma"></bean>
    ="address"="com.gong.spring.beans.autowire.Address" 
    p:city="武汉" p:street="络南街道"<!-- 要求配置Student时,要依赖于Car-->
    ="student"="com.gong.spring.beans.autowire.Student"="tom"
    p:age="12" p:score="99.00" autowire="byName" depends-on="car">
</beans>

spring允许用户通过depends-on属性设定bean前置依赖bean,前置依赖bean会在本Bean实例化之前就创建好。如果前置依赖于多个Bean,则可以通过逗号,空格的方式来配置bean的名称。

Main.java

2.从容器中获取Bean实例
        Student student = (Student) ctx.getBean("student"); 
        System.out.println(student.toString());
    }
}

输出:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读