使用 public 字段,它会弄乱代理吗?

Using public field, will it mess with the proxies?

我想知道更改 EL 解析器以便 bean 可以使用 jsf 中的 public 字段是否会导致代理出现问题? [这就是它不是重复项的原因。] 所有托管 bean 字段在框架中都必须是私有的,因为这就是 EL 解析器做事的方式。然而,它有点笨重,而且大多数时候看起来毫无用处。

@Named
@RequestScoped
public class myBean{
    public int age;
}

那么它会导致代理试图拦截东西或诸如此类的问题吗?

this question 中的这个人显然改变了 el 解析器所以它是可行的

不幸的是,它会干扰 CDI。

为什么?因为代理 bean 时无法访问 public 字段。使用 Weld 在启动期间你会得到一个定义错误:

WELD-000075: Normal scoped managed bean implementation class has a public field ...

它仅适用于非代理范围(@Singleton@Dependant)。

我同意这有点麻烦,有时看起来没用,所以你有两个解决方案:

  1. 使用IDE自动生成它们。
  2. 使用 lombok 项目。

但其中 none 个是完美的。