Course – Black Friday 2025 – NPI EA (cat= Baeldung)
announcement - icon

Yes, we're now running our Black Friday Sale. All Access and Pro are 33% off until 2nd December, 2025:

>> EXPLORE ACCESS NOW

Partner – Orkes – NPI EA (cat=Spring)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

Partner – Orkes – NPI EA (tag=Microservices)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

eBook – Guide Spring Cloud – NPI EA (cat=Spring Cloud)
announcement - icon

Let's get started with a Microservice Architecture with Spring Cloud:

>> Join Pro and download the eBook

eBook – Mockito – NPI EA (tag = Mockito)
announcement - icon

Mocking is an essential part of unit testing, and the Mockito library makes it easy to write clean and intuitive unit tests for your Java code.

Get started with mocking and improve your application tests using our Mockito guide:

Download the eBook

eBook – Reactive – NPI EA (cat=Reactive)
announcement - icon

Spring 5 added support for reactive programming with the Spring WebFlux module, which has been improved upon ever since. Get started with the Reactor project basics and reactive programming in Spring Boot:

>> Join Pro and download the eBook

eBook – Java Streams – NPI EA (cat=Java Streams)
announcement - icon

Since its introduction in Java 8, the Stream API has become a staple of Java development. The basic operations like iterating, filtering, mapping sequences of elements are deceptively simple to use.

But these can also be overused and fall into some common pitfalls.

To get a better understanding on how Streams work and how to combine them with other language features, check out our guide to Java Streams:

>> Join Pro and download the eBook

eBook – Jackson – NPI EA (cat=Jackson)
announcement - icon

Do JSON right with Jackson

Download the E-book

eBook – HTTP Client – NPI EA (cat=Http Client-Side)
announcement - icon

Get the most out of the Apache HTTP Client

Download the E-book

eBook – Maven – NPI EA (cat = Maven)
announcement - icon

Get Started with Apache Maven:

Download the E-book

eBook – Persistence – NPI EA (cat=Persistence)
announcement - icon

Working on getting your persistence layer right with Spring?

Explore the eBook

eBook – RwS – NPI EA (cat=Spring MVC)
announcement - icon

Building a REST API with Spring?

Download the E-book

Course – LS – NPI EA (cat=Jackson)
announcement - icon

Get started with Spring and Spring Boot, through the Learn Spring course:

>> LEARN SPRING
Course – RWSB – NPI EA (cat=REST)
announcement - icon

Explore Spring Boot 3 and Spring 6 in-depth through building a full REST API with the framework:

>> The New “REST With Spring Boot”

Course – LSS – NPI EA (cat=Spring Security)
announcement - icon

Yes, Spring Security can be complex, from the more advanced functionality within the Core to the deep OAuth support in the framework.

I built the security material as two full courses - Core and OAuth, to get practical with these more complex scenarios. We explore when and how to use each feature and code through it on the backing project.

You can explore the course here:

>> Learn Spring Security

Partner – Orkes – NPI EA (cat=Java)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

Course – LSD – NPI EA (tag=Spring Data JPA)
announcement - icon

Spring Data JPA is a great way to handle the complexity of JPA with the powerful simplicity of Spring Boot.

Get started with Spring Data JPA through the guided reference course:

>> CHECK OUT THE COURSE

Partner – Moderne – NPI EA (cat=Spring Boot)
announcement - icon

Refactor Java code safely — and automatically — with OpenRewrite.

Refactoring big codebases by hand is slow, risky, and easy to put off. That’s where OpenRewrite comes in. The open-source framework for large-scale, automated code transformations helps teams modernize safely and consistently.

Each month, the creators and maintainers of OpenRewrite at Moderne run live, hands-on training sessions — one for newcomers and one for experienced users. You’ll see how recipes work, how to apply them across projects, and how to modernize code with confidence.

Join the next session, bring your questions, and learn how to automate the kind of work that usually eats your sprint time.

Course – Black Friday 2025 – NPI (cat=Baeldung)
announcement - icon

Yes, we're now running our Black Friday Sale. All Access and Pro are 33% off until 2nd December, 2025:

>> EXPLORE ACCESS NOW

1. Introduction

The object creation process in Java most often involves the constructor’s execution. However, in some cases, we may need to create objects without enforcing constructor logic.

For example, we may want to mock dependencies during unit testing or manage the object lifecycle within a framework. Other examples are when working with legacy code with complex constructor dependencies or in specific scenarios of deserialization.

To help us with such use cases, we have Objenesis – a small Java library that allows us to instantiate objects from classes without calling their constructors. It’s useful for libraries and frameworks that need to create objects dynamically, bypassing constructor execution entirely.

In this tutorial, we’ll explore how Objenesis works, how to use it in our projects, and its practical applications through hands-on examples.

2. Traditional Object Creation in Java

We know Java always executes one of the constructors when we create an object using the new keyword.

Let’s create the User class to illustrate this standard object creation in Java:

public class User {
    private String name;

    public User() {
        System.out.println("User constructor is called!");
    }

    // getters and setters
}

Here, we’ve included a print statement in the default constructor of the User class, allowing us to confirm that the constructor is invoked when we create an instance of the User class:

User user = new User();

Upon execution of this code, we can observe that the message User constructor is called! printed on the console, thereby confirming that the constructor was indeed used in the creation of the User object.

3. How Objenesis Works?

Objenesis doesn’t rely on the new keyword, followed by a call to one of the class’s constructors to create an object. Instead, it uses low-level JVM mechanisms to allocate memory and instantiate the object while bypassing constructors entirely.

Internally, Objenesis tries different instantiator strategies until it’s successful, depending on the JVM vendor and version.

3.1. Setup

We’ll add the latest org.objenesis Maven dependency to our pom.xml:

<dependency>
    <groupId>org.objenesis</groupId>
    <artifactId>objenesis</artifactId>
    <version>3.4</version>
</dependency>

This library provides the Objenesis interface with two major implementations:

  • ObjenesisStd: the standard, thread-safe implementation that tries different strategies (relying on vendor and version of JVM) when creating an object
  • ObjenesisSerializer: a specialized non-thread-safe implementation optimized for serialization frameworks

Additionally, Objenesis provides the ObjenesisHelper utility class that simplifies object instantiation using the above implementations.

3.2. Object Creation Using ObjenesisStd

Let’s modify our User class to restrict the use of the constructor entirely:

public class User implements Serializable {
    private String name;

    public User() {
        throw new RuntimeException("User constructor should not be called!");
    }

    // getters and setters
}

Here, we’ve thrown a RuntimeException inside the default constructor to ensure it’s never called in our tests.

Then, let’s create the object of the User class using the ObjenesisStd class without invoking the constructor:

Objenesis objenesis = new ObjenesisStd();
User user = objenesis.newInstance(User.class);
assertNotNull(user);

user.setName("Harry Potter");
assertEquals("Harry Potter", user.getName());

Here, we created an instance of the ObjenesisStd class, a thread-safe implementation of Objenesis. Then, we used it to instantiate the User object without calling its constructor.

The assertNotNull() check ensures that the object is successfully created.

To confirm that the object behaves normally, we set the user’s name using the setName() method and retrieve it with the getName() method, confirming that its properties and behaviors remain intact.

3.3. Object Creation Using ObjenesisSerializer

Similarly, we can utilize the ObjenesisSerializer class to create the User object using a serialization-based instantiation strategy:

Objenesis objenesis = new ObjenesisSerializer();
User user = objenesis.newInstance(User.class);
assertNotNull(user);

user.setName("Harry Potter");
assertEquals("Harry Potter", user.getName());

This implementation of the Objenesis interface uses a method similar to deserialization to create new objects.

The underlying object creation mechanism relies on the principles of serialization. Therefore, we should make sure that our class implements the Serializable interface when using the ObjenesisSerializer to create an object. Otherwise, it’ll likely result in an exception.

3.4. Object Creation Using ObjenesisHelper

Additionally, the Objenesis library provides the ObjenesisHelper utility class, which simplifies object creation using both the standard and serialization strategies.

Let’s examine its usage of the standard strategy:

User user = ObjenesisHelper.newInstance(User.class);
assertNotNull(user);

user.setName("Harry Potter");
assertEquals("Harry Potter", user.getName());

Similarly, we can use the serialization strategy:

User user = ObjenesisHelper.newSerializableInstance(User.class);
assertNotNull(user);

user.setName("Harry Potter");
assertEquals("Harry Potter", user.getName());

So, the ObjenesisHelper class offers a convenient and preferred way to use Objenesis, as it encapsulates the explicit creation of ObjenesisStd or ObjenesisSerializer instances for common use cases.

4. Advanced Use Cases

Objenesis supports many advanced use cases, especially when standard object creation isn’t feasible.

Serialization frameworks, such as Kryo, internally use Objenesis to create objects during deserialization without invoking their constructors. This is crucial for performance and for handling scenarios where the serialized data doesn’t align with the constructor’s requirements.

Mocking frameworks, like Mockito and EasyMock, often utilize Objenesis internally to create mock objects or proxies for testing purposes. When we create a mock of a class, the mocking framework needs to instantiate a proxy object that can intercept method calls and record interactions. Objenesis provides a clean way to create these proxy instances without triggering the potentially complex or dependency-laden constructors of the original class.

Normally, final classes or classes with private constructors are extremely difficult to instantiate reflectively. Objenesis bypasses this restriction, enabling instantiation even when a constructor is private or the class is final.

Some lightweight or custom-built dependency injection frameworks may use Objenesis to instantiate beans or service classes where constructor injection is impractical or not desirable, allowing property-based injection without invoking constructors.

In performance-critical applications, we might want to clone or reuse objects without paying the cost of full reinitialization. Objenesis can help create a fresh instance that we populate manually, skipping expensive constructor logic.

5. Best Practices

Objenesis offers a handy alternative for object instantiation without involving a constructor. However, it’s advised to use it cautiously and understand its implications.

Overuse or misuse can lead to unexpected behavior and maintainability challenges. Let’s see some recommended best practices:

  • Prefer constructors: we should utilize constructors for regular object creation and use Objenesis only when necessary to bypass constructor invocation
  • We should be mindful of security restrictions: environments like Java Security Manager or containerized applications may block Objenesis due to its low-level object instantiation mechanisms
  • Leverage framework integration with Objenesis: when using frameworks like Mockito or Kryo, we should let them handle Objenesis internally instead of invoking it directly
  • Handling of uninitialized objects: since Objenesis skips constructor logic, we should be more careful in dealing with default-initialized fields, as they may lead to unexpected behavior if not properly handled
  • Test instantiated objects: we must ensure that the object created with Objenesis is tested thoroughly – to confirm all properties and behaviors remain intact
  • Document its usage clearly: we should document the usage of Objenesis and the associated object initialization strategy to improve maintainability for other developers

6. Conclusion

In this article, we’ve explored the Objenesis library, which lets us create objects without invoking constructors, making it useful for serialization, mocking, and proxy frameworks.

We’ve explored how it works, set it up in a project, and learned about its capabilities with real-world examples. However, while Objenesis is powerful, we should use it only when necessary to avoid unintended side effects. Additionally, we looked at a few advanced use cases and best practices.

The code backing this article is available on GitHub. Once you're logged in as a Baeldung Pro Member, start learning and coding on the project.
Course – Black Friday 2025 – NPI EA (cat= Baeldung)
announcement - icon

Yes, we're now running our Black Friday Sale. All Access and Pro are 33% off until 2nd December, 2025:

>> EXPLORE ACCESS NOW

Partner – Orkes – NPI EA (cat = Spring)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

Partner – Orkes – NPI EA (tag = Microservices)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

eBook – HTTP Client – NPI EA (cat=HTTP Client-Side)
announcement - icon

The Apache HTTP Client is a very robust library, suitable for both simple and advanced use cases when testing HTTP endpoints. Check out our guide covering basic request and response handling, as well as security, cookies, timeouts, and more:

>> Download the eBook

eBook – Java Concurrency – NPI EA (cat=Java Concurrency)
announcement - icon

Handling concurrency in an application can be a tricky process with many potential pitfalls. A solid grasp of the fundamentals will go a long way to help minimize these issues.

Get started with understanding multi-threaded applications with our Java Concurrency guide:

>> Download the eBook

eBook – Java Streams – NPI EA (cat=Java Streams)
announcement - icon

Since its introduction in Java 8, the Stream API has become a staple of Java development. The basic operations like iterating, filtering, mapping sequences of elements are deceptively simple to use.

But these can also be overused and fall into some common pitfalls.

To get a better understanding on how Streams work and how to combine them with other language features, check out our guide to Java Streams:

>> Join Pro and download the eBook

eBook – Persistence – NPI EA (cat=Persistence)
announcement - icon

Working on getting your persistence layer right with Spring?

Explore the eBook

Course – LS – NPI EA (cat=REST)

announcement - icon

Get started with Spring Boot and with core Spring, through the Learn Spring course:

>> CHECK OUT THE COURSE

Partner – Moderne – NPI EA (tag=Refactoring)
announcement - icon

Modern Java teams move fast — but codebases don’t always keep up. Frameworks change, dependencies drift, and tech debt builds until it starts to drag on delivery. OpenRewrite was built to fix that: an open-source refactoring engine that automates repetitive code changes while keeping developer intent intact.

The monthly training series, led by the creators and maintainers of OpenRewrite at Moderne, walks through real-world migrations and modernization patterns. Whether you’re new to recipes or ready to write your own, you’ll learn practical ways to refactor safely and at scale.

If you’ve ever wished refactoring felt as natural — and as fast — as writing code, this is a good place to start.

Course – Black Friday 2025 – NPI (All)
announcement - icon

Yes, we're now running our Black Friday Sale. All Access and Pro are 33% off until 2nd December, 2025:

>> EXPLORE ACCESS NOW

eBook Jackson – NPI EA – 3 (cat = Jackson)