10.使用ApplicationContext

zhanglei 2022年06月15日 428次浏览

10.1 创建要用到的包和类

新建一个空项目,在空项目里建一个,新建方法参考:SpringBoot的第一个程序 - ZhangLeiのWorld

首先看一下我的项目结构,包是 com.zhanglei,在Application 的同级包zhanglei下创建一个service 包,在service 包里面再建一个实现类包impl,在service 包下写一个 UserService 接口,在 impl 包下创建一个 UserServiceImpl类实现 UserService 接口,如下:

image-20220615205154135

UserService 接口:

package com.zhanglei.service;

public interface UserService {

    void sayHello(String name);
}

UserServiceImpl 类:

package com.zhanglei.service.impl;

import com.zhanglei.service.UserService;
import org.springframework.stereotype.Service;

@Service("userService")
public class UserServiceImpl implements UserService {
    @Override
    public void sayHello(String name) {
        System.out.println("执行了业务方法的sayHello:"+name);
    }
}

10.2 Application中run方法的原理

打开Application类,查看 主函数内容如下:

image-20220615205349518

我很好奇,查看这个 run 方法,ctrl+左键点进去:

image-20220615205751206

​ 发现他的返回值是 ConfigurableApplicationContext 类型的变量,那这个东西到底是个啥,再点进去:

image-20220615210048256

​ 终于发现这个类是继承 ApplicationContext 的,AplicationContext 我就很清楚了,是实现bean 容器的一个接口,既然 ConfigurableApplicationContext 继承它,那么 ConfigurableApplicationContext 也是实现 bean 容器的一个接口,因此我这么做:

image-20220615210539702

​ 既然 run 方法的返回值是 ConfigurableApplicationContext 类型的,那么就用一个ConfigurableApplicationContext 类型的变量接收它,由此就实现了 bean 容器,接下来的操作就跟 Spring 类似了,获取 bean 实例,应用bean 实例 (调用 bean 实例的方法)。

10.3 测试结果与总结

image-20220615211308857

​ 运用ApplicationContext 或者 ConfigurableApplicationContext 都是一样的,因为他们是继承的关系,都可以接收 run 方法的返回值,从而实现 bean 实例。