ComnandLineRunner接口, ApplcationRunner接口

ComnandLineRunner接口, ApplcationRunner接口

介绍:

这两个接口都有一个run方法,执行时间在容器对象创建好后,自动执行run ( )方法。 创建容器的同时会创建容器中的对象,同时会把容器中的对象的属性赋上值

举例:
java 复制代码
@SpringBootApplication
public class Application implements CommandLineRunner {
    @Resource
    private HelloService helloService;

    public static void main(String[] args){
        System.out.println("准备创建容器对象1111111");
        SpringApplication.run(Application.class,args);
        System.out.println("容器对象创建好之后33333");
    }
    @Override
    public void run(String... args) throws Exception {
        String str = helloService.hello("李四");
        System.out.println("调用容器中的对象:"+str);
        //可以自定义操作,如读取文件、数据库等
        System.out.println("在容器对象创建好后,执行run方法222222");
    }
}
java 复制代码
public interface HelloService {
    String hello(String name);
}
java 复制代码
@Service
public class HelloServiceImpl implements HelloService {
    @Override
    public String hello(String name) {
        return "您好:"+name;
    }
}
执行结果:

拦截器

拦截器是SpringMVC中一种对象,能拦截器对Controller的请求。

拦截器框架中有系统的拦截器,还可以自定义拦截器。实现对请求预先处理。

拦截器的使用步骤:

1、创建类实现Handlerlnterceptor接口:根据需要重写其中的preHandle()、postHandle()、afterCompletion()

2、自定义类来实现WebMvcConfigurer接口,在配置类中声明拦截器对象以及要拦截的请求路径

我们以前是写xml文件,现在是把springmvc配置文件中的配置移到了这个接口的方法中,很多和springmvc有关的功能都是在这个接口中实现的:

举例:
java 复制代码
//handLer被拦截器的控制器对象
//true:请求能被Controller处理
//false:请求被截断
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("HandlerInterceptor接口中的preHandle()方法");
        return true;
    }
}
java 复制代码
@Configuration //一定要加这个注解!
public class MyConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        HandlerInterceptor interceptor = new LoginInterceptor();
        String[] path = {"/user/**"};
        String[] excludePath = {"/user/login"};
        registry.addInterceptor(interceptor)
                .addPathPatterns(path)
                .excludePathPatterns(excludePath);
    }
}
java 复制代码
@Controller
public class InterceptorController {
    @RequestMapping("/user/account")
    @ResponseBody
    public String userAccount(){
        return "访问的是/user/account地址";
    }

    @ResponseBody
    @RequestMapping("/user/login")
    public String userLogin(){
        return "访问的是/user/login地址";
    }
}

http://localhost:8081/mydev/user/account

拦截器执行了:

http://localhost:8081/mydev/user/login:

拦截器没有执行:

相关推荐
有梦想的攻城狮1 小时前
maven中的maven-antrun-plugin插件详解
java·maven·插件·antrun
_r0bin_3 小时前
前端面试准备-7
开发语言·前端·javascript·fetch·跨域·class
zhang98800003 小时前
JavaScript 核心原理深度解析-不停留于表面的VUE等的使用!
开发语言·javascript·vue.js
硅的褶皱4 小时前
对比分析LinkedBlockingQueue和SynchronousQueue
java·并发编程
MoFe14 小时前
【.net core】天地图坐标转换为高德地图坐标(WGS84 坐标转 GCJ02 坐标)
java·前端·.netcore
季鸢5 小时前
Java设计模式之观察者模式详解
java·观察者模式·设计模式
Fanxt_Ja5 小时前
【JVM】三色标记法原理
java·开发语言·jvm·算法
蓝婷儿5 小时前
6个月Python学习计划 Day 15 - 函数式编程、高阶函数、生成器/迭代器
开发语言·python·学习
love530love5 小时前
【笔记】在 MSYS2(MINGW64)中正确安装 Rust
运维·开发语言·人工智能·windows·笔记·python·rust
Mr Aokey6 小时前
Spring MVC参数绑定终极手册:单&多参/对象/集合/JSON/文件上传精讲
java·后端·spring