我看到了这个问题
Inject into private, package or public field or provide a setter?
关于如何手动注入(inject)带注解的私有(private)字段(方法是添加setter 或通过构造函数)
但是,重点在于应用服务器(如 glassfish、axis2、jboss 等)如何 能够注入(inject)最终私有(private)字段(无需添加 setter 或构造函数 到用户类)?
引用引用的问题:
public SomeClass {
@Inject
private SomeResource resource;
}
他们是否使用允许访问私有(private)字段的自定义 JVM(非标准 JVM)?
谢谢
最佳答案
这是一个简单的反射“技巧”。它依赖于 Field.setAccessible()
强制成员以编程方式访问的方法:
Set the accessible flag for this object to the indicated boolean value. A value of true indicates that the reflected object should suppress Java language access checking when it is used. A value of false indicates that the reflected object should enforce Java language access checks.
Reflection API 用于获取字段句柄,调用setAccessible()
,然后可以由注入(inject)框架设置。
查看示例 here .
没有魔法,没有自定义 VM。
关于java - 应用服务器如何注入(inject)私有(private)字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2579258/