1. 程式人生 > >依賴註入的3種方式

依賴註入的3種方式

private rand config sys style xmla art ron exceptio

屬性註入:

Car.class

public class Car {
    public String brand;
    private String corp;    
    private double price;
    private int maxSpeed;

public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public int getMaxSpeed() {
return maxSpeed; } public void setMaxSpeed(int maxSpeed) { this.maxSpeed = maxSpeed; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String toString(){ return "brand:"+brand+"/maxSpeed:"+maxSpeed+"/price:"+price; } }

配置文件

<!-- 屬性註入 -->
    <!--bean id="car" class="com.smart.ditype.Car">
        <property name="brand" value="紅旗&amp;CA72"/>
        <property name="maxSpeed" value="200"/>
        <property name="price" value="20000.00"/>
    </bean>

測試:

public class DiTypeTest {
    
public ApplicationContext factory = null; private static String[] CONFIG_FILES = { "com/smart/ditype/beans.xml" }; @BeforeClass public void setUp() throws Exception { factory = new ClassPathXmlApplicationContext(CONFIG_FILES); } @Test public void testCar(){ Car car = (Car)factory.getBean("car"); assertNotNull(car); System.out.println(car); } }

構造函數註入:

Car.class

public class Car {
    public String brand;
    private String corp;    
    private double price;
    private int maxSpeed;

    public Car() {}    
    public Car(String brand, double price) {
        this.brand = brand;
        this.price = price;
    }    

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

配置文件:

<!--構造函數註入:type -->
    <bean id="car1" class="com.smart.ditype.Car">
        <constructor-arg type="java.lang.String">
            <value>紅旗CCCA72</value>
        </constructor-arg>
        <constructor-arg type="double">
            <value>10000</value>
        </constructor-arg>
    </bean>

測試:

@Test
    public void testCar1(){
        Car car1 = (Car)factory.getBean("car1");
        assertNotNull(car1);
        System.out.println(car1);
    }    

工廠註入:

CarFactory.class

public class CarFactory {
   public Car createHongQiCar(){
       Car car = new Car();
       car.setBrand("紅旗CA72");
       return car;
   }
   
   public static Car createCar(){
       Car car = new Car();
       return car;
   }
}

配置文件:

<!-- 工廠方法-->
    <bean id="carFactory" class="com.smart.ditype.CarFactory" />
<bean id="car5" factory-bean="carFactory" factory-method="createHongQiCar">
</bean>
<bean id="car6" class="com.smart.ditype.CarFactory"
factory-method="createCar"></bean>

測試:

@Test
    public void testCar5(){
        Car car5 = (Car)factory.getBean("car5");
        assertNotNull(car5);
        System.out.println("car5:"+car5);
    }

    @Test
    public void testCar6(){
        Car car6 = (Car)factory.getBean("car6");
        assertNotNull(car6);
        System.out.println("car6:"+car6);
    }

依賴註入的3種方式