Beer Gupta
Beer Gupta

Reputation: 67

UnderStanding of @Controller @Service @Repository

I have a doubt regarding dependency injection,Suppose my controller ,service,dao all are singleton so usually when we create the controller we inject the service as a instance variable of that class, but according to the singleton pattern if our controller is stateless then only we would not face any concurrency issue but here We are declaring the service dependency so it should not be stateless so we have to take care of synchronization?

Please clear this doubt as I am beginner so I hope its natural to have this doubt in mind,I don't know if I am thinking totally wrong.Please help.

Upvotes: 0

Views: 1296

Answers (3)

Christopher Yang
Christopher Yang

Reputation: 3879

That's why you need to use @Autowired when you declare a dependent service. Effectively handing the initialization process to the Spring framework instead of instantiating it yourself. Since Spring only has stateless beans, you're injecting one stateless singleton to another stateless singleton, so there's no need to manage thread manually.

Upvotes: 0

jlumietu
jlumietu

Reputation: 6444

All beans in Spring are Singleton by default. This includes any @Controller, @Service, @Repository and others, as well as any xml defined bean.

You could read this and this

From Java basic variable tutorial:

Local Variables Similar to how an object stores its state in fields, a method will often store its temporary state in local variables. The syntax for declaring a local variable is similar to declaring a field (for example, int count = 0;). There is no special keyword designating a variable as local; that determination comes entirely from the location in which the variable is declared — which is between the opening and closing braces of a method. As such, local variables are only visible to the methods in which they are declared; they are not accessible from the rest of the class.

Upvotes: 1

mokarakaya
mokarakaya

Reputation: 723

If your service and controller are stateless, it's ok to inject one to another.

You should not declare any variable which keeps a state in these classes. final variables are ok.

If all operations are defined in methods and they don't use any variables of the classes, dependency injection that you're doing is totally safe.

Upvotes: 0

Related Questions