java jaxb如何工作?

只是好奇jaxb是如何工作的,我有一个注释如下的类:

@XmlRootElement(name = "MyJaxb") Class MyJaxb { @XmlElement protected String str; public void setStr(String str) { this.str = str; } } 

字段str的访问修饰符受到保护,为什么Jaxb仍然可以对其进行编组和解组?

它使用reflection 。 可以使用reflectionAPI(在相应的FieldMethod对象上使用setAccessible(true)访问protectedprivate字段或方法。

请记住 – publicprotectedprivate是对默认可见性的控制,仅此而已。 他们没有(也不能)阻止使用reflection进行访问。

除了回答reflection可以绕过检查(这是正确的)之外,这也是其他JDK内部部件需要的东西,特别是默认的对象序列化和反序列化。 通常这是允许的,因为许多工具都可以从这种访问中受益。 正如其他人正确指出的那样,访问权并不是真正的安全障碍。 它们可以帮助程序员正确地设计抽象,使得更容易想出好的设计。