J2EE之Spring中Bean的配置细节

来源:互联网 发布:淘宝店卖家界面 编辑:程序博客网 时间:2024/06/06 09:07

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>
1 0
原创粉丝点击