构造方法的方式的属性注入

public class Student {
     public String name;
     public Integer age;
  
     /* 构造方法 */
     public Student(String name, Integer age) {
         this.name = name;
         this.age = age;
     }
 }

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"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans.xsd">
  
     <bean id="student" class="com.xzh.demo4.Student">
         <constructor-arg name="name" value="IT888"/>
         <constructor-arg name="age" value="18"/>
     </bean>
  
 </beans>

测试:

@Test
 public  void test(){
     ApplicationContext applicationContext = 
         new ClassPathXmlApplicationContext("applicationContext.xml");
  
     Student student = (Student)applicationContext.getBean("student");
     System.out.println(student.name);
     System.out.println(student.age);
 }

Set方法的属性注入

需要提供set方法:

public class Student {
     public String name;
     public Integer age;
  
     public void setName(String name) {
         this.name = name;
     }
  
     public void setAge(Integer age) {
         this.age = age;
     }
 }

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"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans.xsd">
  
     <bean id="student" class="com.xzh.demo4.Student">
         <property name="name" value="IT666"/>
         <property name="age" value="20"/>
     </bean>
  
 </beans>

测试:

@Test
 public  void test(){
     ApplicationContext applicationContext = 
         new ClassPathXmlApplicationContext("applicationContext.xml");
  
     Student student = (Student)applicationContext.getBean("student");
     System.out.println(student.name);
     System.out.println(student.age);
 }

Set方法设置对象类型的属性

public class Dog {
  
     public String name;
     public Integer age;
     public String color;
  
     public void setName(String name) {
         this.name = name;
     }
  
     public void setAge(Integer age) {
         this.age = age;
     }
  
     public void setColor(String color) {
         this.color = color;
     }
  
     @Override
     public String toString() {
         return "Dog{" +
                 "name='" + name + '\'' +
                 ", age=" + age +
                 ", color='" + color + '\'' +
                 '}';
     }
 }
  
  
 public class Student {
     public String name;
     public Integer age;
     public Dog dog;
  
     /* 构造方法 */
     public Student(String name, Integer age) {
         this.name = name;
         this.age = age;
     }
  
     public void setDog(Dog dog) {
         this.dog = dog;
     }
 }

applicationContext.xml 中配置:

<bean id="dog" class="com.xzh.demo4.Dog">
     <property name="name" value="旺财"/>
     <property name="age" value="3"/>
     <property name="color" value="白色"/>
 </bean>
 <bean id="student" class="com.xzh.demo4.Student">
     <constructor-arg name="name" value="IT888"/>
     <constructor-arg name="age" value="18"/>
     <property name="dog" ref="dog"/>
 </bean>

测试:

@Test
 public  void test(){
     ApplicationContext applicationContext = new
             ClassPathXmlApplicationContext("applicationContext.xml");
  
     Student student = (Student)applicationContext.getBean("student");
     System.out.println(student.name);
     System.out.println(student.age);
     System.out.println(student.dog);
 }

P名称空间的属性注入

使用p名称空间,就不需要写那那么多的property。使用时,要添加名称空间

xmlns:p="http://www.springframework.org/schema/p"

Spring属性注入_spring

Dog类、Student类和测试类 同 Set方法设置对象类型的属性 一样。

applicationContext.xml 中配置:

<?xml versinotallow="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:p="http://www.springframework.org/schema/p"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans.xsd">
  
     <bean id="dog" class="com.xzh.demo4.Dog" p:name="旺财" p:age="3" p:color="黑色"/>
     <bean id="student" class="com.xzh.demo4.Student" p:dog-ref="dog">
         <constructor-arg name="name" value="IT888"/>
         <constructor-arg name="age" value="18"/>
     </bean>
  
 </beans>

spEL表达式的属性注入

public class Dog {
  
     public String name;
     public Integer age;
     public String color;
  
     public void setName(String name) {
         this.name = name;
     }
  
     public void setAge(Integer age) {
         this.age = age;
     }
  
     public void setColor(String color) {
         this.color = color;
     }
  
     @Override
     public String toString() {
         return "Dog{" +
                 "name='" + name + '\'' +
                 ", age=" + age +
                 ", color='" + color + '\'' +
                 '}';
     }
 }
  
  
 public class Student {
     public String name;
     public Integer age;
     public Dog dog;
     public String myDogName;
  
     /* 构造方法 */
     public Student(String name, Integer age) {
         this.name = name;
         this.age = age;
     }
  
     public void setDog(Dog dog) {
         this.dog = dog;
     }
  
     public void setMyDogName(String myDogName) {
         this.myDogName = myDogName;
     }
 }

applicationContext.xml 中配置:

<bean id="dog" class="com.xzh.demo4.Dog">
     <property name="name" value="#{'旺财'}"/>
     <property name="age" value="#{2}"/>
     <property name="color" value="#{'红色'}"/>
 </bean>
 <bean id="student" class="com.xzh.demo4.Student">
     <constructor-arg name="name" value="IT888"/>
     <constructor-arg name="age" value="18"/>
     <property name="dog" value="#{dog}"/>
     <property name="myDogName" value="#{dog.name}"/>
 </bean>

测试:

@Test
 public  void test(){
     ApplicationContext applicationContext = new
             ClassPathXmlApplicationContext("applicationContext.xml");
  
     Student student = (Student)applicationContext.getBean("student");
     System.out.println(student.name);
     System.out.println(student.age);
     System.out.println(student.dog);
     System.out.println(student.myDogName);
 }

集合类型属性注入

数组

public class Student {
     public String name;
     public Integer age;
     public String[] attr;
  
     /* 构造方法 */
     public Student(String name, Integer age) {
         this.name = name;
         this.age = age;
     }
  
     public void setAttr(String[] attr) {
         this.attr = attr;
     }
 }

applicationContext.xml 中配置:

<bean id="student" class="com.xzh.demo4.Student">
     <constructor-arg name="name" value="IT888"/>
     <constructor-arg name="age" value="18"/>
     <!--数组-->
     <property name="attr">
         <list>
             <value>zs</value>
             <value>ls</value>
             <value>ww</value>
         </list>
     </property>
 </bean>

测试:

@Test
 public  void test(){
     ApplicationContext applicationContext = new
             ClassPathXmlApplicationContext("applicationContext.xml");
  
     Student student = (Student)applicationContext.getBean("student");
     System.out.println(student.name);
     System.out.println(student.age);
     System.out.println(Arrays.toString(student.attr));
 }

List集合

public class Student {
     public String name;
     public Integer age;
     public List myList;
  
     /* 构造方法 */
     public Student(String name, Integer age) {
         this.name = name;
         this.age = age;
     }
  
     public void setMyList(List myList) {
         this.myList = myList;
     }
 }

applicationContext.xml 中配置:

<bean id="student" class="com.xzh.demo4.Student">
     <constructor-arg name="name" value="IT888"/>
     <constructor-arg name="age" value="18"/>
     <!--List-->
     <property name="myList">
         <list>
             <value>123</value>
             <value>456</value>
             <value>789</value>
         </list>
     </property>
 </bean>

测试:

@Test
 public  void test(){
     ApplicationContext applicationContext = new
             ClassPathXmlApplicationContext("applicationContext.xml");
  
     Student student = (Student)applicationContext.getBean("student");
     System.out.println(student.name);
     System.out.println(student.age);
     System.out.println(student.myList);
 }

Set集合

public class Student {
     public String name;
     public Integer age;
     public Set mySet;
  
     /* 构造方法 */
     public Student(String name, Integer age) {
         this.name = name;
         this.age = age;
     }
  
     public void setMySet(Set mySet) {
         this.mySet = mySet;
     }
 }

applicationContext.xml 中配置:

<bean id="student" class="com.xzh.demo4.Student">
     <constructor-arg name="name" value="IT888"/>
     <constructor-arg name="age" value="18"/>
     <!--Set-->
     <property name="mySet">
         <set>
             <value>123</value>
             <value>456</value>
             <value>789</value>
         </set>
     </property>
 </bean>

测试:

@Test
 public  void test(){
     ApplicationContext applicationContext = new
             ClassPathXmlApplicationContext("applicationContext.xml");
  
     Student student = (Student)applicationContext.getBean("student");
     System.out.println(student.name);
     System.out.println(student.age);
     System.out.println(student.mySet);
 }

Map集合

public class Student {
     public String name;
     public Integer age;
     public Map myMap;
  
     /* 构造方法 */
     public Student(String name, Integer age) {
         this.name = name;
         this.age = age;
     }
  
     public void setMyMap(Map myMap) {
         this.myMap = myMap;
     }
 }

applicationContext.xml 中配置:

<bean id="student" class="com.xzh.demo4.Student">
     <constructor-arg name="name" value="IT888"/>
     <constructor-arg name="age" value="18"/>
     <!--Map-->
     <property name="myMap">
         <map>
             <entry key="key1" value="value1"/>
             <entry key="key2" value="value2"/>
             <entry key="key3" value="value3"/>
         </map>
     </property>
 </bean>

测试:

@Test
 public  void test(){
     ApplicationContext applicationContext = new
             ClassPathXmlApplicationContext("applicationContext.xml");
  
     Student student = (Student)applicationContext.getBean("student");
     System.out.println(student.name);
     System.out.println(student.age);
     System.out.println(student.myMap);
 }