Spring – is using new a bad practice?


Is creating objects by hand, i.e. using new operator instead of registering Spring bean and using dependency injection considered bad practice? I mean, does Spring IoC container have to know about all objects in the application? If so, why?


You want Spring to create beans for classes that :

  • you want/need to inject instance(s) in other beans
  • you need to inject beans (or dependencies) in their own instances.
  • you want them to benefit from Spring features (instantiation management, transaction management, proxy classes Spring empowered such as Repository/Interceptor and so for…)

Services, controllers or interceptors are example of them.
For example a controller may need inject a service or an interceptor.
As well as you don’t want to handle the instantiation of these classes by implementing yourself the singleton pattern for each one. Which could be error-prone and require boiler plate code.
So you want all of these classes to be beans managed by Spring.

But you don’t want to Spring create beans for classes that :

  • you don’t want/need to inject instance(s) in other beans
  • you don’t need to inject beans (or rdependencies) in their own instances
  • you don’t need them benefit from Spring features

Entity, DTO, Value Object are example of them.

For example an entity never needs to be injected into another entity or in a service as a dependency because entities are not created at the container startup but are generally created inside a method and have a scope limited to the methods lifespan.
As well as you don’t need Spring to create instances which the lifespan is a method. The new operator does very well the job.
So defining them as bean instances makes no sense and appears even counter intuitive.

Answered By – davidxxx

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published