Spring日常笔记注入05--构造注入
一、在Student类中定义有参构造方法
package com.example.ba03; public class Student { private String name; private int age; //声明一个引用类型 private School school; public void Student(){ System.out.println("spring会调用类的无参构造方法创建对象"); } public Student(String myname, int myage, School myschool){ System.out.println("===spring会调用类的有参构造方法创建对象==="); this.name = myname; this.age = myage; this.school = myschool; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public void setSchool(School school){ this.school = school; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + ", school=" + school + '}'; } }
二、编写配置文件
<?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"> <!--声明student对象 注入:就是赋值的意思 简单类型:spring中规定java的基本数据类型和string都是简单类型 di:给属性赋值 1.set注入(设值注入):spring调用类的set方法,可以在set方法中完成属性赋值 1)简单类型的set注入 <bean id="xx" class="yyy"> <property name="属性名字" value="此属性的值"/> 一个property只能给一个属性赋值 <property......> 2)引用类型的set注入:spring调用类的set方法 <bean id="xx" class="yyy"> <property name="属性名字" ref="bean的id(对象的名称)"/> 一个property只能给一个属性赋值 <property......> </bean> 2.构造注入:spring调用类有参构造方法,在创建对象的同时,在构造方法中给属性赋值 语法:使用<constructor-arg>标签 <constructor-arg>标签:一个<constructor-arg>表示一个构造方法的参数。 name:表示构造方法的形参名 index:表示构造方法的参数的位置,参数从左往右位置是0,1,2,3的顺序 ref:构造方法的形参类型是引用类型的,使用ref --> <!--使用name属性实现构造注入--> <bean id="myStudent" class="com.example.ba03.Student"> <constructor-arg name="myname" value="张三"/> <constructor-arg name="myage" value="20"/> <constructor-arg name="myschool" ref="myXueXiao"/> </bean> <!--使用index属性--> <bean id="myStudent2" class="com.example.ba03.Student"> <constructor-arg index="0" value="李四"/> <constructor-arg index="1" value="23"/> <constructor-arg index="2" ref="myXueXiao"/> </bean> <!--声明School对象--> <bean id="myXueXiao" class="com.example.ba03.School"> <property name="name" value="北京大学"/> <property name="address" value="北京的海淀区"/> </bean> </beans>
三、编写测试类
public class MyTest03 { @Test public void test01(){ System.out.println("===test01==="); String config = "ba03/applicationContext.xml"; ApplicationContext ac = new ClassPathXmlApplicationContext(config); Student student = (Student) ac.getBean("myStudent"); System.out.println("student对象="+student); } @Test public void test02(){ System.out.println("===test02==="); String config = "ba03/applicationContext.xml"; ApplicationContext ac = new ClassPathXmlApplicationContext(config); Student student = (Student) ac.getBean("myStudent2"); System.out.println("student对象="+student); } }
运行结果:
===test01===
===spring会调用类的有参构造方法创建对象===
===spring会调用类的有参构造方法创建对象===
student对象=Student{name='张三', age=20, school=School{name='北京大学', address='北京的海淀区'}}
===test02===
===spring会调用类的有参构造方法创建对象===
===spring会调用类的有参构造方法创建对象===
student对象=Student{name='李四', age=23, school=School{name='北京大学', address='北京的海淀区'}}