Javassist

Javassist (Java programming assistant) is a Java library providing a means to manipulate the Java bytecode of an application.[1] In this sense Javassist provides the support for structural reflection, i.e. the ability to change the implementation of a class at run time.

Javassist
Developer(s)Shigeru Chiba (programmer)
Stable release
3.25.0-GA / April 16, 2019 (2019-04-16)
Repository
Written inJava
Operating systemCross-platform
TypeBytecode Engineering Library
Licensedual license of the MPL and LGPL.
Websitewww.javassist.org

Bytecode manipulation is performed at load-time through a provided class loader.

Javassist enables Java programs to define a new class at runtime and to modify a class file when the JVM loads it. Unlike other similar bytecode editors, Javassist provides two levels of API: source level and bytecode level. Using the source-level API, programmers can edit a class file without knowledge of the specifications of the Java bytecode; the whole API is designed with only the vocabulary of the Java language. Programmers can even specify inserted bytecode in the form of Java source text; Javassist compiles it on the fly. On the other hand, the bytecode-level API allows the users to directly edit a class file as other editors.

Uses

Javassist can be used for the following:

  • For specifying the bytecode using source code – can compile a fragment of source text online (e.g., just a single statement)
  • For aspect-oriented programming (AOP) – can introduce new methods into a class and insert before/after/around advice at both the caller and callee sides
  • For reflection at runtime – can use a metaobject that controls method calls on base-level objects
  • For remote method invocation – can call a method on a remote object running on a web server, an alternative to Java RMI that does not need a stub compiler such as rmic
gollark: ``` _ _ __ _ _ __ ___ __ _____ __| | ___ (_)_ __ __ _ / _` | '__/ _ \ \ \ /\ / / _ \ / _` |/ _ \| | '_ \ / _` || (_| | | | __/ \ V V / __/ | (_| | (_) | | | | | (_| | \__,_|_| \___| \_/\_/ \___| \__,_|\___/|_|_| |_|\__, | |___/ _ ____ ____ ___ ___ _ / \ / ___| / ___|_ _|_ _| __ _ _ __| |_ / _ \ \___ \| | | | | | / _` | '__| __| / ___ \ ___) | |___ | | | | | (_| | | | |_ /_/ \_\____/ \____|___|___| \__,_|_| \__| ___ _ __ _____ _|__ \| '_ \ / _ \ \ /\ / / / /| | | | (_) \ V V / |_| |_| |_|\___/ \_/\_/ (_) ```
gollark: Sure? But never underestimate the patience of people doing stupid things.
gollark: Ah yes.
gollark: But it is said that locks only work for keeping out honest people, inasmuch as they can be bypassed or picked or whatever quite easily.
gollark: What are you responding to here?

See also

References

  1. "Javassist". JBoss Community.

Official website


This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.