【发布时间】:2016-06-12 21:30:33
【问题描述】:
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();
}
}
或者说我可以用拦截器重现装饰器的所有行为但使用装饰器更舒服是否合理?
【问题讨论】:
标签: java jakarta-ee design-patterns decorator interceptor