Spring框架02IOC

public class Student {   //学生实体类

    private  String   name;  //姓名
    private  Integer  age;  //年龄
    private  Grade   grade;  //年级
    
    
    
    
    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + ", grade=" + grade
                + "]";
    }
    public Student() {
        super();
    }
    public Student(String name, Integer age) {
        super();
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    //  set()  DI 依赖注入
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public Grade getGrade() {
        return grade;
    }
    public void setGrade(Grade grade) {
        this.grade = grade;
    }
    
    
    
}
复制代码
复制代码
public class Grade {   //年级实体类
    private String  name;  //年级名称

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

    public Grade() {
        super();
    }

    public Grade(String name) {
        super();
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

}
复制代码

2.创建对应的applicationContext.xml文件 方法项目中的src目录下

复制代码
<?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">

      <!-- 配置Grade 类的bean  01.设值注入  保证类中有属性对应的set()即可 -->
  <bean id="grade" class="cn.bdqn.bean.Grade">
       <!-- name的属性值  默认使用DI 查询类中的setName() -->
   <property name="name" value="1年级"/>
  </bean>

    <!--  配置学生Bean   实例化学生对象   默认执行的是无参构造 -->
    <bean id="student" class="cn.bdqn.bean.Student">
        <property name="name" value="小马"/>
        <property name="age" value="50"/>
        <!-- 对类中的域属性  赋值  使用ref -->
        <property name="grade" ref="grade"/>
    </bean>
</beans>
复制代码

3.创建对应的测试类

复制代码
public class StudentTest {
    
    @Test
    public  void  test01(){
        ApplicationContext context=
                new ClassPathXmlApplicationContext("applicationContext.xml");
        /*
         * 获取容器给我们创建的Student对象   ioc的体现
         *  本身由自身创建对象的过程,把创建对象的权利移交给了spring容器!  IOC  控制反转
         * 
         * 之前 Student student=new Student();
         * 现在context.getBean("student");
         * context容器来创建对象了
         * 
         */
         Student student=(Student) context.getBean("student");
        System.out.println(student);
    }
}
复制代码

4.运行查看效果

5.修改Student类中的代码 为了验证 使用构造注入的时候可以省略set、get以及无参构造方法

复制代码
public class Student {   //学生实体类

    private  String   name;  //姓名
    private  Integer  age;  //年龄
    private  Grade   grade;  //年级
    
    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + ", grade=" + grade
                + "]";
    }
    //带参构造
    public Student(String name, Integer age, Grade grade) {
        super();
        this.name = name;
        this.age = age;
        this.grade = grade;
    }
    
}
复制代码

6.修改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">

      <!-- 配置Grade 类的bean -->
  <bean id="grade" class="cn.bdqn.bean.Grade">
       <!-- name的属性值  默认使用DI 查询类中的setName() -->
   <property name="name" value="1年级"/>
  </bean>
    <!-- 02.构造注入    调用带参构造来创建对象的实例
              保证类中有相应的带参构造    set()和无参构造 都可以 消失了...  -->
    <bean id="student" class="cn.bdqn.bean.Student">
          <!-- 001.使用参数下标
       <constructor-arg  index="0" value="小马"/>
       <constructor-arg  index="1" value="50"/>
       <constructor-arg  index="2" ref="grade"/> -->
        <!--002.按照参数的顺序   必须和参数顺序 一致 
       <constructor-arg   value="小马1"/>
       <constructor-arg   value="501"/>
       <constructor-arg   ref="grade"/> -->
       <!--003.使用构造参数名称 不是全局变量      进行注入   推荐使用 -->
       <constructor-arg  name="name" value="小马2"/>
       <constructor-arg  name="age"  value="502"/>
       <constructor-arg  name="grade" ref="grade"/>
    </bean>
    
</beans>
复制代码

7.测试代码不变直接运行查看效果

 8.使用p命名空间注入  修改Student实体类,因为p注入需要对应的set()和无参构造器

 Student实体类

9.修改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"
    xmlns:p="http://www.springframework.org/schema/p"  
    xmlns:c="http://www.springframework.org/schema/c"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans.xsd">

      <!-- 配置Grade 类的bean -->
  <bean id="grade" class="cn.bdqn.bean.Grade">
       <!-- name的属性值  默认使用DI 查询类中的setName() -->
   <property name="name" value="1年级"/>
  </bean>
    <!-- 03.使用p命名空间注入   必须有set()和 无参构造函数 
    <bean id="student" class="cn.bdqn.bean.Student" p:name="小马哥" 
    p:age="50" p:grade-ref="grade"/>-->
    
    
    <!-- 04.使用c命名空间注入 必须要有对应的带参构造  -->
     <bean id="student" class="cn.bdqn.bean.Student" c:name="小马哥" 
    c:age="50" c:grade-ref="grade"/>
</beans>
复制代码
原文地址:https://www.cnblogs.com/kaisadadi/p/7605179.html