java jaxb如何工作?
只是好奇jaxb是如何工作的,我有一个注释如下的类:
@XmlRootElement(name = "MyJaxb") Class MyJaxb { @XmlElement protected String str; public void setStr(String str) { this.str = str; } }
字段str的访问修饰符受到保护,为什么Jaxb仍然可以对其进行编组和解组?
它使用reflection 。 可以使用reflectionAPI(在相应的Field
或Method
对象上使用setAccessible(true)
访问protected
或private
字段或方法。
请记住 – public
, protected
和private
是对默认可见性的控制,仅此而已。 他们没有(也不能)阻止使用reflection进行访问。
除了回答reflection可以绕过检查(这是正确的)之外,这也是其他JDK内部部件需要的东西,特别是默认的对象序列化和反序列化。 通常这是允许的,因为许多工具都可以从这种访问中受益。 正如其他人正确指出的那样,访问权并不是真正的安全障碍。 它们可以帮助程序员正确地设计抽象,使得更容易想出好的设计。