Spring双生武魂之IOC

众所周知,Spring的精髓是什么?没错,就是IOC(DI)和AOP。

AOP在之前已有记载,点击传送  Spring双生武魂之AOP

什么是IOC?

小白肯定不知道什么是IOC或者说DI,这里就直接白话,方便小白理解

IOC(Inversion of Control):控制反转

控制反转,我们需要知道的是反转的是资源获取方向的控制。这样理解,平时我们在写好一个类时,在实例化时需要new,那就是向容器发起资源请求,容器是收到请求后才被动的给我们资源。而应用IOC后,则变为容器主动来推送资源。

DI(Dependency Injection):依赖注入

通俗理解为我们准备了一些方式来接受容器给我们推过来的资源,例如我们常用的setter方法。

而Spring框架所做的事就是用IOC来管理bean,并且为程序直接提供bean实例。

以下从三个问题进入正题

怎样将我们的bean纳入IOC容器的管理?

首先准备一个类作为实例

public class HelloWorld {
    private String name;
    private int age;
    public  HelloWorld(){
        System.out.println("正在调用HelloWorld的构造函数");
    }

    public int getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

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

然后将该bean在配置文件中“声明"(纳入IOC管理)

 其中id就是该bean的名字,理解成给bean起名字就可以,class就是类的路径

property标签中做的就是依赖注入(注入属性),理解成给bean的属性赋值即可

怎样创建IOC容器?

Spring提供了两种方式实现,这里我们主要讲第二种

BeanFactory: IOC 容器的基本实现

ApplicationContext: 提供了更多的高级特性,是 BeanFactory 的子接口

ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");

ApplicationContext 在初始化上下文时就实例化所有单例的 Bean。(默认 spirng 容器中 的 bean 都是单例对象)

怎么从IOC容器中获取bean?

使用getbean()方法获取bean,其中的参数:

String:根据配置文件中的 ID 属性来获取 bean

Class:根据对象的类型来获取 bean

完整实例

public static void main(String[] args) {
        //创建IOC容器
        ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
        //getBean方法从容器中获取Bean
        HelloWorld helloWorld =(HelloWorld) ioc.getBean("hello");
        //调用方法测试
        String name = helloWorld.getName();
        System.out.println(name);
        System.out.println(helloWorld.getAge());
    }

结果:

可以看到容器确实给了我们一个bean的实例,而且该实例的属性也是通过依赖注入的方式进去的。因为在其中还有作者其他配置好的bean,同时也佐证了上文提到的在ApplicationContext初始化时,所有IOC管理的bean都进行了实例化!(而且默认是单例)

依赖注入(DI)

不要把依赖想得很复杂,初学阶段就理解为给bean中实例的属性赋值

注入的方式有三种,分别是:

1.通过属性注入

2.通过构造方法注入

3.通过工厂方法注入

通过属性

通俗来说就是在配置文件中写好,然后运行时程序就会注入,类似于上文的

通过构造方法

通俗来说就是,调用有参的构造方法进行注入,例如

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值