J2EE之Spring中Bean的自动装配及Bean之间的关系

来源:互联网 发布:电脑桌面备忘录软件 编辑:程序博客网 时间:2024/05/22 09:47

J2EE之Spring中Bean的自动装配及Bean之间的关系

Bean的自动装配:

这里写图片描述

这里写图片描述

代码实现:
beans-autowire.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.mooc.spring.beans.autowire.Address"     p:city="Beijing" p:street="HuiLongGuan"></bean>     <bean id="address2" class="com.mooc.spring.beans.autowire.Address"     p:city="baoma" p:street="yiqi"></bean>     <bean id="car" class="com.mooc.spring.beans.autowire.Car"     p:brand="Audi" p:price="300000"></bean>     <!--      根据名字进行自动的装配,使用 autowire="byName"      byName根据bean的名字和当前bean的setter风格的属性名进行自动的装配             若有匹配的则进行自动装配,如没有则不装配    byType根据bean的类型和当前的bean的属性的类型进行自动装配            如果当前ioc容器中有1个以上的类型匹配则抛异常      -->     <bean id="person" class="com.mooc.spring.beans.autowire.Person"     p:name="Tom" autowire="byType"></bean></beans>

Car.java:

package com.mooc.spring.beans.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 + ", getBrand()=" + getBrand() + ", getPrice()=" + getPrice()                + ", getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString()                + "]";    }}

Address.java:

package com.mooc.spring.beans.autowire;public class Address {    private String city;    private String 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;    }    @Override    public String toString() {        return "Address [city=" + city + ", street=" + street + "]";    }}

Person.java:

package com.mooc.spring.beans.autowire;public class Person {    private String name;    private Address address;    private 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;    }    @Override    public String toString() {        return "Person [name=" + name + ", address=" + address + ", car=" + car + "]";    }}

main.java:

package com.mooc.spring.beans.autowire;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class main {    public static void main(String[] args) {        ApplicationContext context=new ClassPathXmlApplicationContext("beans-autowire.xml");        Person person=(Person) context.getBean("person");        System.out.println(person);    }}

Bean之间的关系:

这里写图片描述

这里写图片描述

代码实现:
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:bean的属性abstract="true,这样的bean不能被IOC实例化,无法被继承    若一个bean的class属性没有被指定,则该bean必须是一个抽象bean    可以忽略父 Bean 的 class 属性, 让子 Bean 指定自己的类, 而共享相同的属性配置. 但此时 abstract 必须设为 true     -->    <bean id="address" class="com.mooc.spring.beans.autowire.Address"    p:city="Beijing^" p:street="WuDaoKou"></bean>    <!--     bean配置的继承,使用bean的parent的继承,子类也可以覆盖父类的属性    <bean id="address2" p:city="Hangzhou" p:street="liufuya" parent="address"></bean>     -->    <bean id="address2" p:street="liufuya" parent="address"></bean>    <bean id="address3" p:street="demaxiya" parent="address2"></bean>    <bean id="car" class="com.mooc.spring.beans.autowire.Car"    p:brand="aodi" p:price="30000"></bean>    <!-- 要求在配置Person时,必须有一个关联的car! 换句话说person这个bean    依赖于car这个bean -->    <bean id="person" class="com.mooc.spring.beans.autowire.Person"    p:name="Tom" p:address-ref="address3" depends-on="car"></bean></beans>

main.java:

package com.mooc.spring.beans.relation;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.mooc.spring.beans.autowire.Address;import com.mooc.spring.beans.autowire.Person;public class main {    public static void main(String[] args) {        ApplicationContext context=new ClassPathXmlApplicationContext("beans-relation.xml");        Address address=(Address) context.getBean("address");        System.out.println(address);        address=(Address) context.getBean("address2");        System.out.println(address);        address=(Address) context.getBean("address3");        System.out.println(address);        Person person=(Person) context.getBean("person");        System.out.println(person);    }}
1 0
原创粉丝点击