Spring @Autowired annotaion

144 Views Asked by At

Spring @Autowired

I have a doubt on Spring @Autowired annotation.Please Help...

In Spring mvc ,when I tried @Autowired in this order

Controller--->Service--->Dao

ie,In Controller I autowired Service Class Object , In Service Class Autowire Dao Object.

This Injection chain works perfectly.

Similliarly In strutrs2+Spring ,I applied @Autowired Annotation in this way

Action--->Service-->Dao

This Injection chain also works fine.

If I call a funtion from outside this chain (eg:Custom Taglib class (from jsp)) to funtion in Service class Then in this Service class the Autowired dao object is null(ie,this call braks the chain).

My questions is

Is this @Autowired works in a Injection chain Only?

1

There are 1 best solutions below

3
Josh Ghiloni On BEST ANSWER

Beans that have @Autowired fields only have them set if they are sent through the Spring Bean Postprocessor -- that is, like you said, if you autowire them yourself. That is a big reason that constructor injection is much more preferred than field injection. Instead of doing

@Service
public class MyService {
     @Autowired
     private MyDao dao;

     ...
}

you should do

@Service
public class MyService {
    private final MyDao dao;

    @Autowired
    public MyService(MyDao dao) {
        this.dao = dao;
    }
}

That way, when you're in a situation where you can't rely on a service to be post-processed (as in your case of using the jsp tag library), you can simply instantiate a new instance with a MyDao object and be on your merry way.