Attribute injection in Bean (4)

Spring supports constructor injection and setter injection:

Constructor injection:

car.java

package cn.spring.demo5;

public class Car {
    private String name;
    private Double prices;  
    public Car() {
        super();
    }
    public Car(String name, Double prices) {
        super();
        this.name = name;
        this.prices = prices;
    }
    @Override
    public String toString() {
        return "Car [name=" + name + ", prices=" + prices + "]";
    }
}
有两种方式(两者是一样的结果):
<bean id="car" class="cn.spring.demo5.Car" >
        <!-- 构造方法的注入 (第1种)-->
      <constructor-arg name="name" value="宝马"/>
        <constructor-arg name="prices" value="100000.00"/>
        <!-- 下标索引的方式 (第2种)-->
        <constructor-arg index="0" type="java.lang.String" value="奔驰"/>
        <constructor-arg index="1" type="java.lang.Double" value="200000"/>
    </bean>

setter method injection:

car2.java

package cn.spring.demo5;

public class Car2 {
    private String name;
    private Double prices;
    public void setName(String name) {
        this.name = name;
    }
    public void setPrices(Double prices) {
        this.prices = prices;
    }
    @Override
    public String toString() {
        return "Car2 [name=" + name + ", prices=" + prices + "]";
    }

}
  • setter method injection
    <bean id="car2" class="cn.spring.demo5.Car2" >
    <!-- property name是属性名称,value是普通的属性的值,ref:引用的是对象 -->
    <property name="name" value="保时捷"></property>
    <property name="prices" value="300000"></property>
    </bean>
  • Setter methods inject object properties
    <property name="car2" ref="car"/>

namespace injection

Step 1: Now xml first introduces xmlns:p=" http://www.springframework.org/schema/p " as follows: # That line is new

<?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">

car3.java

package cn.spring.demo5;

public class Car3 {
    private String name;
    private Double prices;
    public void setName(String name) {
        this.name = name;
    }
    public void setPrices(Double prices) {
        this.prices = prices;
    }
    @Override
    public String toString() {
        return "Car3 [name=" + name + ", prices=" + prices + "]";
    }
}
<!-- 名称 空间注入方式,先引入xmlns:p="http://www.springframework.org/schema/p"-->
    <bean id="car3" class="cn.spring.demo5.Car3" p:name="奥迪" p:prices="400000"/>

SpEL: Injection of properties

Spring3.0提供注入属性方式:
语法:#{表达式}
<bean id="" value="#{表达式}">

car4.java

package cn.spring.demo5;

public class Car4 {
    private String name;
    private Double prices;
    public void setName(String name) {
        this.name = name;
    }
    public void setPrices(Double prices) {
        this.prices = prices;
    }
    @Override
    public String toString() {
        return "Car4 [name=" + name + ", prices=" + prices + "]";
    }
}
<!--SpEL:属性的注入: -->
    <bean id="car4" class="cn.spring.demo5.Car4">
    <property name="name" value="#{'大众'}"></property>
    <property name="prices" value="#{'500000'}"></property>
    </bean>

ref refers to other id or name object examples

person.java

package cn.spring.demo5;

public class Person {
    private String name;
    private Car2 car;

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

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

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

}
<bean id="person1" class="cn.spring.demo5.Person1" p:name="李四" p:car-ref="car2">
    </bean>

ref refers to the demonstration of other class objects or methods

personinfo.java

package cn.spring.demo5;

public class PersonInfo {
    private String name;

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

    public String getName() {
        return name;
    }

    public String showname(){
        return name+"七";
    }
}
Reference properties of other classes (personinfo.java)

person2.java

package cn.spring.demo5;

public class Person2 {
    private String name;
    private Car2 car;

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

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

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

}
<!--SpEL:属性的注入:调用属性 -->
    <bean id="person2" class="cn.spring.demo5.Person2" >
    <!-- property name是属性名称,value是普通的属性的值,ref:引用的是其他id或name对象 -->
    <property name="name" value="#{personinfo.name}"></property>
    <property name="car" value="#{car2}"></property>
    </bean>
    <!-- 注意要有get方法 -->
    <bean id="personinfo" class="cn.spring.demo5.PersonInfo">
    <property name="name" value="#{'王五六'}"></property>
Referencing methods of other classes (personinfo.java)
package cn.spring.demo5;

public class Person3 {
    private String name;
    private Car2 car;

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

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

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

}
<!--SpEL:属性的注入: 可以调用方法-->
    <bean id="person3" class="cn.spring.demo5.Person3" >
    <!-- property name是属性名称,value是普通的属性的值,ref:引用的是其他id或name对象 -->
    <property name="name" value="#{personinfo.showname()}"></property>
    <property name="car" value="#{car2}"></property>
    </bean>

Test class writing:

package cn.spring.demo5;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class springtest5 {
    @Test
    public void demo1() {
        ApplicationContext applicationcontext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        Car car=(Car) applicationcontext.getBean("car");
        System.out.println(car);
    }

    @Test
    public void demo2() {
        ApplicationContext applicationcontext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        Car2 car=(Car2) applicationcontext.getBean("car2");
        System.out.println(car);
    }
    @Test
    public void demo2_1() {
        ApplicationContext applicationcontext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        Car3 car=(Car3) applicationcontext.getBean("car3");
        System.out.println(car);
    }

    @Test
    public void demo2_2() {
        ApplicationContext applicationcontext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        Car4 car=(Car4) applicationcontext.getBean("car4");
        System.out.println(car);
    }

    @Test
    public void demo3() {
        ApplicationContext applicationcontext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        Person person=(Person) applicationcontext.getBean("person");
        System.out.println(person);
    }

    @Test
    public void demo3_1() {
        ApplicationContext applicationcontext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        Person1 person=(Person1) applicationcontext.getBean("person1");
        System.out.println(person);
    }

    @Test
    public void demo3_2() {
        ApplicationContext applicationcontext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        Person2 person=(Person2) applicationcontext.getBean("person2");
        System.out.println(person);
    }

    @Test
    public void demo3_3() {
        ApplicationContext applicationcontext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        Person3 person=(Person3) applicationcontext.getBean("person3");
        System.out.println(person);
    }
}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324832664&siteId=291194637