关于Controller继承Controller的效果与切面触发测试

关于继承Controller测试

首先创建一个Controller

@RestController
@RequestMapping(value="ceshi")
public class CeshiController {
    @GetMapping(value = "ceshi")
    public String ceshi() {
        return "测试";
    }
}

创建一个Controller继承上一个Controller

@RestController
@RequestMapping(value="to/ceshi")
public class Ceshi2Controller extends CeshiController{
}

1.访问/to/ceshi/ceshi接口,得到返回值测试。

效果:
关于Controller继承Controller的效果与切面触发测试_第1张图片

2.修改继承Controller如下(重写ceshi方法,但不修改Mapping注解)

@RestController
@RequestMapping(value="to/ceshi")
public class Ceshi2Controller extends CeshiController{
    public String ceshi() {
        return "测试11";
    }
}

效果:
关于Controller继承Controller的效果与切面触发测试_第2张图片

3.修改继承Controller如下(重写ceshi方法,修改Mapping注解)

@RestController
@RequestMapping(value="to/ceshi")
public class Ceshi2Controller extends CeshiController{
    @GetMapping(value = "ceshi11")
    public String ceshi() {
        return "测试11";
    }
}

效果:
访问/to/ceshi/ceshi时报404
关于Controller继承Controller的效果与切面触发测试_第3张图片
访问/to/ceshi/ceshi11时得到重写后返回值
关于Controller继承Controller的效果与切面触发测试_第4张图片

4.修改继承Controller如下(不修改Mapping注解,把Mapping注解的方法改个名)

@RestController
@RequestMapping(value="to/ceshi")
public class Ceshi2Controller extends CeshiController{
    @GetMapping(value = "ceshi")
    public String ceshi11() {
        return "测试11";
    }
}

效果:无法启动项目
关于Controller继承Controller的效果与切面触发测试_第5张图片

关于继承Controller切面触发测试

创建一个切面,将继承Controller所有方法设置为切点

@Aspect
@Component
public class CeshiAspect {
    @Pointcut("execution(* ceshi.Controller.Ceshi2Controller.*(..))")
    public void demo() {}

    @Before("demo()")
    public void before(JoinPoint joinPoint){
        System.out.println("--------触发前置通知---------");
    }
}

1.测试未重写方法(不触发切面)

@RestController
@RequestMapping(value="to/ceshi")
public class Ceshi2Controller extends CeshiController{
}

效果:
关于Controller继承Controller的效果与切面触发测试_第6张图片

2.测试重写方法

@RestController
@RequestMapping(value="to/ceshi")
public class Ceshi2Controller extends CeshiController{
    public String ceshi() {
        return "测试11";
    }
}

效果:

关于Controller继承Controller的效果与切面触发测试_第7张图片
在这里插入图片描述

3.测试新增独有方法

@RestController
@RequestMapping(value="to/ceshi")
public class Ceshi2Controller extends CeshiController{
    @GetMapping(value = "ceshi222")
    public String ceshi() {
        return "测试222";
    }
}

效果:
关于Controller继承Controller的效果与切面触发测试_第8张图片
在这里插入图片描述

补充:若不希望对方法进行重写,在访问接口时想要提前触发一些方法可使用拦截器。

你可能感兴趣的:(服务器,数据库,运维)