J2EE之Spring中Bean的配置细节

J2EE之Spring中Bean的配置细节

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

代码实现:
Car.java:

package com.mooc.spring.beans;

public class Car {

    private String brand;
    private String corp;
    private double price;
    private int maxSpeed;
    public Car(String brand, String corp, double price) {
        super();
        this.brand = brand;
        this.corp = corp;
        this.price = price;
    }

    public Car(String brand, String corp, int maxSpeed) {
        super();
        this.brand = brand;
        this.corp = corp;
        this.maxSpeed = maxSpeed;
    }


    public Car(String brand, String corp, double price, int maxSpeed) {
        super();
        this.brand = brand;
        this.corp = corp;
        this.price = price;
        this.maxSpeed = maxSpeed;
    }

    @Override
    public String toString() {
        return "Car [brand=" + brand + ", corp=" + corp + ", price=" + price + ", maxSpeed=" + maxSpeed + "]";
    }

    public void setMaxSpeed(int maxSpeed) {
        this.maxSpeed = maxSpeed;
    }

    public void setPrice(double price) {
        this.price = price;
    }


}

Person.java:

package com.mooc.spring.beans;

public class Person {
    private String name;
    private int age;

    private Car car;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Car getCar() {
        return car;
    }

    public void setCar(Car car) {
        this.car = car;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", car=" + car + "]";
    }

    public Person() {
        super();
    }

    public Person(String name, int age, Car car) {
        super();
        this.name = name;
        this.age = age;
        this.car = car;
    }






}

main.java:

package com.mooc.spring.beans;

import java.io.IOException;
import java.lang.annotation.Annotation;
import java.util.Locale;
import java.util.Map;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.MessageSourceResolvable;
import org.springframework.context.NoSuchMessageException;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.env.Environment;
import org.springframework.core.io.Resource;

public class main {

    public static void main(String[] args) {
        /*
        //创建HelloWord的一个对象

        HelloWord helloWord=new HelloWord();
        //为那么赋值
        helloWord.setName("atguigu");
        helloWord.hello();

        */

        //1.创建SpringIOC的容器对象

        //ApplicationContext 代表IOC容器
        //ClassPathXmlApplicationContext:从 类路径下加载配置文件,是ApplicationContext接口的实现类
        //FileSystemXmlApplicationContext: 从文件系统中加载配置文件,是ApplicationContext接口的实现类
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");

//      2.从IOC容器中获取Bean对象
//      HelloWord helloWord=(HelloWord) context.getBean("helloWord");
        HelloWord helloWord=context.getBean(HelloWord.class);//适用类型获取,只适用于唯一的一哥bean
        System.out.println(helloWord);

        //调用hello方法
        helloWord.hello();


        Car car=(Car) context.getBean("car");
        System.out.println(car);

        car =(Car) context.getBean("car2");
        System.out.println(car);


        Person person=(Person) context.getBean("person");
        System.out.println(person);

        person=(Person) context.getBean("person2");
        System.out.println(person);

    }

}

applicationContext.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:util="http://www.springframework.org/schema/util"
    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
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">


    <!-- 配置bean 
        class:bean的全类名,通过反射的方式在IOC容器中创建Bean,所以要求Bean中必须有无参数的构造器
        id:标示容器中的bean,id必须唯一  HelloWord helloWord=(HelloWord) context.getBean("helloWord");
    -->
    <bean id="helloWord" class="com.mooc.spring.beans.HelloWord">
        <property name="name" value="Spring"></property>
    </bean> 

    <!-- 通过构造方法来配置Bean的属性  ,用index确定顺序,以type确定类型,以区分重载构造器-->
    <bean id="car" class="com.mooc.spring.beans.Car">
        <constructor-arg value="Audi" index="0"></constructor-arg>
        <!-- 如果字面值包含特殊字符可以使用<![CDATA[<字面值>]]>包裹起来 -->
        <!-- 属性值可以使用value子节点直接进行配置 -->
        <constructor-arg index="1">
            <value><![CDATA[<shanghai>]]></value>
        </constructor-arg>
        <constructor-arg value="300000" type="double"> </constructor-arg>
    </bean>

    <bean id="car2" class="com.mooc.spring.beans.Car">
        <constructor-arg value="Baoma" type="java.lang.String"></constructor-arg>
        <constructor-arg value="shanghai" type="java.lang.String"></constructor-arg>
        <constructor-arg type="int">
            <value>250</value>
        </constructor-arg>
    </bean>


    <bean id="person" class="com.mooc.spring.beans.Person">
        <property name="name" value="Tom"></property>
        <property name="age" value="24"></property>
        <!-- 可以使用property的ref属性建立bean之间的引用关系 -->
        <property name="car" ref="car2"></property>

        <!-- 
        也可以写成以下方式
        <property name="car>
            <ref bean="car2 />
        </property>     
         -->
         <!-- 
         内部bean: 不能被外部引用,只能在内部被引用,不需使用id=“”
         <property name="car">
            <bean class="com.mooc.spring.beans.Car">
                <constructor-arg value="Baoma" type="java.lang.String"></constructor-arg>
                <constructor-arg value="shanghai" type="java.lang.String"></constructor-arg>
                <constructor-arg type="double" value="200000"></constructor-arg>
            </bean>
        </property>
        <property name="car.maxSpeed" value="8"></property>


          -->
    </bean>


    <bean id="person2" class="com.mooc.spring.beans.Person">
        <constructor-arg value="Jerry"></constructor-arg>
        <constructor-arg value="25"></constructor-arg> 
        <constructor-arg ref="car2"></constructor-arg>
         <!-- 测试赋值null 
         <constructor-arg><null/></constructor-arg>
         -->
         <!-- 级联属性的配置 ,属性先要初始化,后才可以被级联属性赋值,否则会爆出异常,和Struct2不同
         <constructor-arg ref="car"></constructor-arg>       
         <property name="car.maxSpeed" value="8"></property>
         -->
    </bean>



</beans>

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

代码实现:

Person.java:

package com.mooc.spring.beans.collections;

import java.util.List;

import com.mooc.spring.beans.Car;

public class Person {
    private String name;
    private int age;

    private List<Car> cars;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }



    public List<Car> getCars() {
        return cars;
    }

    public void setCars(List<Car> cars) {
        this.cars = cars;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", cars=" + cars + "]";
    }



}

NewPerson.java:

package com.mooc.spring.beans.collections;

import java.util.List;
import java.util.Map;

import com.mooc.spring.beans.Car;

public class NewPerson {
    private String name;
    private int age;

    private Map<String, Car> cars;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    public Map<String, Car> getCars() {
        return cars;
    }
    public void setCars(Map<String, Car> cars) {
        this.cars = cars;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", cars=" + cars + "]";
    }


}

DataSourse.java:

package com.mooc.spring.beans.collections;

import java.util.Properties;

public class DataSourse {
    private Properties properties;

    public Properties getProperties() {
        return properties;
    }

    public void setProperties(Properties properties) {
        this.properties = properties;
    }

    @Override
    public String toString() {
        return "DataSourse [properties=" + properties + "]";
    }


}

main.java:

package com.mooc.spring.beans.collections;

import java.util.Properties;

public class DataSourse {
    private Properties properties;

    public Properties getProperties() {
        return properties;
    }

    public void setProperties(Properties properties) {
        this.properties = properties;
    }

    @Override
    public String toString() {
        return "DataSourse [properties=" + properties + "]";
    }


}

applicationContext.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:util="http://www.springframework.org/schema/util"
    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
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">


    <!-- 配置bean 
        class:bean的全类名,通过反射的方式在IOC容器中创建Bean,所以要求Bean中必须有无参数的构造器
        id:标示容器中的bean,id必须唯一  HelloWord helloWord=(HelloWord) context.getBean("helloWord");
    -->
    <bean id="helloWord" class="com.mooc.spring.beans.HelloWord">
        <property name="name" value="Spring"></property>
    </bean> 

    <!-- 通过构造方法来配置Bean的属性  ,用index确定顺序,以type确定类型,以区分重载构造器-->
    <bean id="car" class="com.mooc.spring.beans.Car">
        <constructor-arg value="Audi" index="0"></constructor-arg>
        <!-- 如果字面值包含特殊字符可以使用<![CDATA[<字面值>]]>包裹起来 -->
        <!-- 属性值可以使用value子节点直接进行配置 -->
        <constructor-arg index="1">
            <value><![CDATA[<shanghai>]]></value>
        </constructor-arg>
        <constructor-arg value="300000" type="double"> </constructor-arg>
    </bean>

    <bean id="car2" class="com.mooc.spring.beans.Car">
        <constructor-arg value="Baoma" type="java.lang.String"></constructor-arg>
        <constructor-arg value="shanghai" type="java.lang.String"></constructor-arg>
        <constructor-arg type="int">
            <value>250</value>
        </constructor-arg>
    </bean>


    <bean id="person" class="com.mooc.spring.beans.Person">
        <property name="name" value="Tom"></property>
        <property name="age" value="24"></property>
        <!-- 可以使用property的ref属性建立bean之间的引用关系 -->
        <property name="car" ref="car2"></property>

        <!-- 
        也可以写成以下方式
        <property name="car>
            <ref bean="car2 />
        </property>     
         -->
         <!-- 
         内部bean: 不能被外部引用,只能在内部被引用,不需使用id=“”
         <property name="car">
            <bean class="com.mooc.spring.beans.Car">
                <constructor-arg value="Baoma" type="java.lang.String"></constructor-arg>
                <constructor-arg value="shanghai" type="java.lang.String"></constructor-arg>
                <constructor-arg type="double" value="200000"></constructor-arg>
            </bean>
        </property>
        <property name="car.maxSpeed" value="8"></property>


          -->
    </bean>


    <bean id="person2" class="com.mooc.spring.beans.Person">
        <constructor-arg value="Jerry"></constructor-arg>
        <constructor-arg value="25"></constructor-arg> 
        <constructor-arg ref="car2"></constructor-arg>
         <!-- 测试赋值null 
         <constructor-arg><null/></constructor-arg>
         -->
         <!-- 级联属性的配置 ,属性先要初始化,后才可以被级联属性赋值,否则会爆出异常,和Struct2不同
         <constructor-arg ref="car"></constructor-arg>       
         <property name="car.maxSpeed" value="8"></property>
         -->
    </bean>


    <!-- 测试如何配置集合属性 使用list节点为list属性赋值 -->
    <bean id="person3" class="com.mooc.spring.beans.collections.Person">
        <property name="name" value="fzw"></property>
        <property name="age" value="27"></property>
        <property name="cars">
            <list>
                <ref bean="car"/>
                <ref bean="car2"/>
                <bean class="com.mooc.spring.beans.Car">
                    <constructor-arg value="fort" type="java.lang.String"></constructor-arg>
                    <constructor-arg value="shanghai" type="java.lang.String"></constructor-arg>
                    <constructor-arg type="double" value="200000"></constructor-arg>
                </bean>
            </list>
        </property>
    </bean>

    <!-- 配置Map属性值  使用map节点及entry子节点配置Map类型的成员变量-->
    <bean id="newPerson" class="com.mooc.spring.beans.collections.NewPerson">
        <property name="name" value="Rose"></property>
        <property name="age" value="17"></property>
        <property name="cars">
            <map>
                <entry key="AA" value-ref="car"></entry>
                <entry key="BB" value-ref="car2"></entry>
            </map>
        </property>
    </bean>

    <!-- 配置Properties配置属性  ,使用 props和prop为properties属性赋值-->
    <bean id="dataSourse" class="com.mooc.spring.beans.collections.DataSourse">
        <property name="properties">
            <props>
                <prop key="user">root</prop>
                <prop key="password">123456</prop>
                <prop key="jdbcUrl">jdbc:mysql:///test</prop>
                <prop key="driverClass">com.mysql.jdbc.Driver</prop>
            </props>
        </property>
    </bean>


    <!-- 配置单例的集合bean,以供多个bean进行引用,**需要导入util命名空间**  使用util把bean独立出来 -->
    <util:list id="cars">
        <ref bean="car" />
        <ref bean="car2" />
    </util:list>

    <bean id="person4" class="com.mooc.spring.beans.collections.Person">
        <property name="name" value="jack"></property>
        <property name="age" value="29"></property>
        <property name="cars" ref="cars"></property>

    </bean>

    <!-- 通过p命名空间为bean的属性赋值,**需要先导入p命名空间** ,相对于传统的配置方式更加简洁-->
    <bean id="person5" class="com.mooc.spring.beans.collections.Person" p:age="30" p:name="queen" p:cars-ref="cars"></bean>

</beans>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值