Spring修改由自定义批注标记的任何类的字段

时间:2018-08-07 00:43:09

标签: java spring annotations interceptor

我想用自定义注释标记类的字段。每当调用任何方法时,我都希望对该字段进行一些修改。

public class Message{
    public Integer id;

    @FreeText   // this is my custom annotation 
    public String htmlMsg;
    public String textMsg ;
 }

此注释(@FreeText)可以在任何类中使用。 在seasar框架中,我可以通过创建一个拦截器并重写invoke方法来做到这一点。我可以获取此类的对象,并找到标有我的注释的字段并进行修改。但是,我找不到在春季进行的方法。 在春季,我发现了诸如MethodInvocationInterceptor之类的方法,但是我不知道如何实现它。您能在春季建议任何方法吗?

1 个答案:

答案 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();
}

希望获得帮助。