spring工厂方法配置bean及spEl

来源:互联网 发布:公交卡套淘宝 编辑:程序博客网 时间:2024/05/17 03:51
<?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实例-->    <bean id="car1" class="com.dasenlin.test.springmodel.factory.StaticCarFactory" factory-method="getCar">    <constructor-arg value="audi"></constructor-arg>            </bean>    <!-- 实例工厂的方法 -->    <bean id="carFactory" class="com.dasenlin.test.springmodel.factory.InstanceCarFactory"></bean>    <bean id="car2" factory-bean="carFactory" factory-method="getCar">        <constructor-arg value="audi"></constructor-arg>    </bean></beans>

java部分及测试(静态化获取值部分)

package com.dasenlin.test.springmodel.factory;import java.util.HashMap;import java.util.Map;public class StaticCarFactory {    private static Map<String,Car> cars =new HashMap<String,Car>();    static{        cars.put("audi", new Car("audi","shanghai",100000));        cars.put("Fute", new Car("fute","beijing",30000));    }    public static Car getCar(String name){        return cars.get(name);    }}

实例化获取值部分

package com.dasenlin.test.springmodel.factory;import java.util.HashMap;import java.util.Map;public class InstanceCarFactory {    private Map<String,Car> cars=null;    public InstanceCarFactory(){        cars = new HashMap<String, Car>();        cars.put("audi", new Car("audi","shanghai",300000));        cars.put("fute", new Car("fute","beijing",200000));    }    public Car getCar(String name){        return cars.get(name);    }}

car实例

package com.dasenlin.test.springmodel.factory;/** *构造方法注入  */public class Car {    private String brand;    private String company;    private int price;    private double maxSpeed;    public Car(String brand, String company, int price) {        super();        this.brand = brand;        this.company = company;        this.price = price;    }    public Car(String brand, String company, double maxSpeed) {        super();        this.brand = brand;        this.company = company;        this.maxSpeed = maxSpeed;    }    public double getMaxSpeed() {        return maxSpeed;    }    public void setMaxSpeed(double maxSpeed) {        this.maxSpeed = maxSpeed;    }    @Override    public String toString() {        return "Car [brand=" + brand + ", company=" + company + ", price=" + price + ", maxSpeed=" + maxSpeed + "]";    }}

以及spring默认的单例模式

<?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的scope 属性来配置bean的作用域    singleton:默认值,容器初始化创建一个bean,单利的     prototype:原型的,容器初始化时不创建bean的实例,而是在每次请求的时候创建一个新的bean-->    <bean id="car" class="com.dasenlin.test.springmodel.autowire.Car" scope="prototype">        <property name="brand" value="Audi"></property>        <property name="price" value="3000000"></property>    </bean></beans>

spEL表达式

<?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">    <!-- 使用spel为属性赋值一个字面值 -->    <bean id="address" class="com.dasenlin.test.springmodel.spel.Address">        <property name="city" value="#{'BeiJing'}"></property>        <property name="street" value="Wudaokou"></property>    </bean>    <!-- 使用spEl引用静态属性 -->    <bean id="car" class="com.dasenlin.test.springmodel.spel.Car">        <property name="brand" value="Audi"></property>        <property name="price" value="500000"></property>        <property name="tyrePerimeter" value="#{T(java.lang.Math).PI * 80}"></property>    </bean>    <bean id="person" class="com.dasenlin.test.springmodel.spel.Person">        <!-- spEl来引用其他的Bean -->        <property name="car" value="#{car}"></property>        <!-- spEl来引用其他的Bean的属性 -->        <property name="city" value="#{address.city}"></property>        <property name="info" value="#{car.price >300000 ? '金领':'白领'}"></property>        <property name="name" value="Tom"></property>    </bean>    <bean id="carlife" class="com.dasenlin.test.springmodel.spelcon.Car"    init-method="instance" destroy-method="destory">    </bean></beans>