我想用自定义注释标记类的字段。每当调用任何方法时,我都希望对该字段进行一些修改。
public class Message{
public Integer id;
@FreeText // this is my custom annotation
public String htmlMsg;
public String textMsg ;
}
此注释(@FreeText)可以在任何类中使用。 在seasar框架中,我可以通过创建一个拦截器并重写invoke方法来做到这一点。我可以获取此类的对象,并找到标有我的注释的字段并进行修改。但是,我找不到在春季进行的方法。 在春季,我发现了诸如MethodInvocationInterceptor之类的方法,但是我不知道如何实现它。您能在春季建议任何方法吗?
答案 0 :(得分:0)
Seasar2和Spring非常接近。我没有测试过,但是您可以做这样的事情。 首先创建FreeText自定义批注
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Documented
public @interface FreeText {}
然后创建以下拦截器
public class EncryptSensitiveDataInterceptor extends MethodInterceptor {
@Override
public Object invoke(MethodInvocation in) throws Throwable {
Object[] params = in.getArguments();
Object param = params[0];
for (Field field : param.getClass().getDeclaredFields()) {
for (Annotation anno : field.getDeclaredAnnotations()) {
if (anno instanceof FreeText) {
field.set(param, [YOUR CUSTOM LOGIC METHOD]);
}
}
}
return in.proceed();
}
希望获得帮助。