java - 应用服务器如何注入(inject)私有(private)字段?

标签 java dependency-injection annotations

我看到了这个问题

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/

相关文章:

ios - 如何获取录音针的坐标以计算用户位置和针之间的距离

java - 如何防止接口(interface)在继承类中实现?

PHP (Laravel) 依赖注入(inject)基础

C++ 依赖注入(inject) : Object lifetimes?

java - 是否有基于静态上下文的标准Java依赖注入(inject)API?

mysql - 如何创建具有 OnetoMany 和 ManytoOne 关系的实体?

android - 为什么android sdk中默认的proguard配置使用keep *注释*

java - 在 Spring MVC 中调度任务

java - JUnit 5 TestSuite 替代方案?

java - 无法访问的代码 - 在 switch 语句中返回后放置一个中断