Spring之IOC原理实现

Spring框架的IOC是基于Java反射机制实现的。

1 反射

反射 (Reflection) 是 Java 的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。
Oracle 官方说明:

Reflection enables Java code to discover information about the fields, methods and constructors of loaded classes, and to use reflected fields, methods, and constructors to operate on their underlying counterparts, within security restrictions.
The API accommodates applications that need access to either the public members of a target object (based on its runtime class) or the members declared by a given class. It also allows programs to suppress default reflective access control.

Java反射机制

  • 是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
  • 对于任意一个对象,都能够调用它的任意方法和属性;
1.1 创建实体类
package com.giser.java.reflect;

/**
 * @author giserDev
 * @description
 * @date 2024-01-03 21:54:07
 */
public class Car {
   
   
    //属性
    private String name;
    private int age;
    private String color;

    //无参数构造
    public Car() {
   
   
    }

    //有参数构造
    public Car(String name, int age, String color) {
   
   
        this.name = name;
        this.age = age;
        this.color = color;
    }

    //普通方法
    private void run() {
   
   
        System.out.println("私有方法执行。。。");
    }

    //get和set方法
    public String getName() {
   
   
        return name;
    }
    public void setName(String name) {
   
   
        this.name = name;
    }
    public int getAge() {
   
   
        return age;
    }
    public void setAge(int age) {
   
   
        this.age = age;
    }
    public String getColor() {
   
   
        return color;
    }
    public void setColor(String color) {
   
   
        this.color = color;
    }

    @Override
    public String toString() {
   
   
        return "Car{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", color='" + color + '\'' +
                '}';
    }
}
1.2 反射测试
1.2.1 获取class对象
    @Test
    public void test01() throws Exception {
   
   
        // 1 通过类名获取
        Class<Car> carClazz1 = Car.class;

        // 2 通过对象获取
        Class<? extends Car> carClazz2 = new Car().getClass();

        // 3 通过Class.forName()获取
        Class<?> carClazz3 = Class.forName("com.giser.java.reflect.Car");

        // 实例化
        Car car = carClazz1.getConstructor().newInstance();
        System.out.println(car);
    }
1.2.2 获取构造方法
    @Test
    public void test02() {
   
   
        Class carClazz = Car.class;
        // 获取所有的public构造方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值