下面用的过滤器都是注解方式
可以使用非注解方式,就是去web.xml配置映射关系
上面程序的执行输出是
再加一个过滤器
下面来看一段程序
输出结果
和过滤器是否非常相识
但是上面这段程序存在的问题:在编译阶段已经完全确定了调用关系,如果你想改变他们的调用顺序或者继续添加一个方法(好比过滤器),就必须修改java源代码.
而java修改源代码需要重新编译,项目需要重新测试,重新发布.增添了繁琐麻烦且容易出错的过程
违背了:开闭原则--->对扩展开发,对修改关闭
简单说就是对项目扩展我没有意见,但是你扩展的过程中修改了原来的代码.这就不对了.
要达到的效果是,可以扩展,但是别改代码
而过滤器的先后顺序,是可以随时改变的,在servlet中可以通过web.xml的过滤器隐射顺序,或者
在SpringBoot中@Order注解等(注解其实还是要改代码,不推荐)方式,动态改变执行顺序
既:编译阶段并没有确定调用顺序,而是运行阶段动态组合而成的.
这种那么这种设计模式被称为责任链设计模式
责任链设计模式最大核心思想:在程序运行阶段,动态的组合程序的调用顺序.