拦截器和装饰器之间的区别
2022-09-03 01:56:29
Java中的拦截器和装饰器之间有什么区别吗?严格来说,我可以使用装饰器实现拦截器无法实现的东西,反之亦然吗?
除了我必须检查方法名称以在拦截器中添加特定于方法的行为的问题:
拦截 器:
@Nice
@Interceptor
public class NiceGreeterInterceptor {
@AroundInvoke
public Object decorate(InvocationContext ic) throws Exception {
Method method = ic.getMethod();
String methodName = method.getName();
Object result = ic.proceed();
if (methodName.equals("greet")) {
return "NEW " + result;
}
}
}
装饰:
@Decorator
public class GreeterDecorator implements Greeter {
@Inject
@Any
@Delegate
private Greeter greeter;
@Override
public String greet() {
return "NEW " + greeter.greet();
}
}
或者说我可以用拦截器重现装饰器的所有行为,但使用装饰器更舒服,这是合理的吗?