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()); } } 输出: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |