应届生应聘阿里,字节跳动必须知道Spring 依赖注入!你还没掌握吗?

2021-02-06 05:17

阅读:731

标签:etag   大学   lap   图片   实例化   ddr   contex   数位   自己   

一.注入方式分类

注入分为设值注入和和构造注入
设值注入 指调用setter的方法传入被调用者的实例
构造注入指的是构造调用者实例的时候,完成被调用者地 实例化
说白了,第一个是用setter方法传的值,第二个是使用了有参构造方法

二.设值注入的实现

本文中,使用学生类Student 和学校类School 作为示范
Student

public class Student {
    private  String name ;
    private  int age;

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

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name=‘" + name + ‘\‘‘ +
                ", age=" + age +
                ‘}‘;
    }
}

在resource中的spring xml中将这个类进行声明

在test类中进行测试

    public void  test01(){

        String config = "test/spring.xml";
        //创建spring对象
        ApplicationContext ctx = new ClassPathXmlApplicationContext(config);
        Student ser = (Student) ctx.getBean("student");
        System.out.println("Student"+ser);

    }

测试结果如图,我们发现,此时的实体类没有给属性赋值,均为默认赋值。
技术图片

此时,我们开始给属性赋值,语法为下表所示

    

这时,我们运行test,所得结果如下
技术图片

如果在此时的setter方法中将this.x=x注释掉,我们会发现,程序依然能运行,但是不会给属性赋值,甚至没有的属性,只要有这个setter方法,依然会运行所以说,这种方法是根据属性的名字去寻找setter方法的,而setter是程序员自己决定的。

上例的属性赋值是简单赋值(基本数据类型和String类),下面我们学习属性是引用类型的赋值。
School类

public class School {

    private  String address;
    private  String name;

    public void setAddress(String address) {
        this.address = address;
    }

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

    @Override
    public String toString() {
        return "School{" +
                "address=‘" + address + ‘\‘‘ +
                ", name=‘" + name + ‘\‘‘ +
                ‘}‘;
    }
}

修改后的Student

public class Student {
    private  String name ;
    private  int age;
    private School school;

    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 +
                ‘}‘;
    }
}

此时我们需要对spring的xml进行配置

由上可以看出,引用数据类型是将本来value的地方改为ref =“bean的id”
同时将声明的School类进行赋值
运行test
技术图片

三.构造注入的实现

此时将Student类写一个有参的构造方法

    public Student(String name, int age, School school) {
        this.name = name;
        this.age = age;
        this.school = school;
    }

此时,构造注入不会调用无参构造方法,而是调用有参构造来实现。
此时我们在xml文件中不会使用property属性进行设置,而是使用constructor-arg 进行设置,
配置的xml文件如下所示。

运行test 的结果如下
技术图片

配置xml还有另外一种方法
使用index属性

    

此时使用的index是有参构造的参数位置,结果如
技术图片

一摸一样。。

应届生应聘阿里,字节跳动必须知道Spring 依赖注入!你还没掌握吗?

标签:etag   大学   lap   图片   实例化   ddr   contex   数位   自己   

原文地址:https://blog.51cto.com/14799672/2490516


评论


亲,登录后才可以留言!