11.使用 CommandLineRunnner

zhanglei 2022年06月16日 408次浏览

11.1 接口内涵

image-20220616205331119

​ 可见CommandLineRunnner 里只有一个run 方法。这个接口的作用是:在对象创建之后留一小块时间进行的预处理。

11.2 接口应用

​ 首先创建一个 新模块:_011_springboot_CommandLineRunner,并打开Application 类:

image-20220616210412178

​ 我知道这个run 方法的返回值是 ConfigurationApplicationContext ,是首先容器的接口,因此run 方法是在创建容器。

​ 下面比如说我要在创建容器之后立即做一些预处理,可以让Application 类实现 CommandLineRunner 接口,将光标放在接口上,按住 alt +enter 点击实现接口方法:

image-20220616210946301

package com.zhanglei;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application implements CommandLineRunner {

    public static void main(String[] args) {
        //创建容器
        SpringApplication.run(Application.class, args);
        System.out.println("预处理之后");
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println("这是创建对象后做的预处理");
    }
}

​ 运行 Application :

image-20220616211246276

11.3 接口应用扩展

​ springboot 在创建容器后,我就可以将一些bean 实例自动注入到容器中,这样就可以直接对 bean 实例进行应用。

11.3.1 bean 实例创建

​ 首先在 com.zhanglei 目录下创建一个新的service包,在service包下创建一个UserService 接口:

image-20220616211808976

​ 在 接口中写一个方法:

package com.zhanglei.service;

public interface UserService {
    void sayHello(String str);
}

​ 将鼠标放在 UserService 上,按 alt+enter ,点击实现接口:

image-20220616212046732

​ 将实现类放在 service 包下的 impl 包下:

image-20220616212253562

​ 重写方法,并在实现类上加注解 @Service,表明创建这个类的对象 :

package com.zhanglei.service.impl;
import com.zhanglei.service.UserService;

@Service("userServiceImpl")//表明 bean id ="userServiceImpl",默认类的首字母小写
public class UserServiceImpl implements UserService {
    @Override
    public void sayHello(String str) {
        System.out.println(str+"你好");
    }
}

11.3.2 实现预处理

​ springboot 在创建容器后,我就可以将一些bean 实例自动注入到容器中,这样就可以对 bean 实例直接进行应用。

package com.zhanglei;

import com.zhanglei.service.UserService;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import javax.annotation.Resource;

@SpringBootApplication
public class Application implements CommandLineRunner {
    //注入对象
    @Resource
    private UserService userService;

    public static void main(String[] args) {
        //创建容器
        SpringApplication.run(Application.class, args);
        System.out.println("预处理之后");
    }


    @Override
    public void run(String... args) throws Exception {
        userService.sayHello("张磊");
        System.out.println("这是创建对象后做的预处理");
    }
}

​ 运行 Application:

image-20220616213501461