

Something like this would inject the spring bean.

@Autowired private StudentDao studentDao; // Autowires by type. Injects the instance whose type is StudentDao But if we have more than one spring bean of one type then we use Qualifier Annotation along with Autowired which in facts injects the spring bean by name.



An application context with :

<bean id="studentDao1" class="StudentDao" /> <bean id="studentDao2" class="StudentDao" />



So now if we have two instances of StudentDao (studentDao1 and studentDao2), we can inject spring bean by name.

@Autowired @Qualifier("studentDao1") private StudentDao studentDao1; @Autowired @Qualifier("studentDao2") private StudentDao studentDao2; Same thing can be achieved with Resource annotaion specified by JSR-250. So we can inject a bean into a field or single parameter method with this annotation. Autowired is little more flexible than Resource since it can be used with multi parameter method as well as constructors.

We can inject bean by name with Resource annotation in the following manner.



@Resource private StudentDao studentDao1; Before jumping to Type Safe Dependency Injection from Spring, I would like to to discuss the way we have been doing it earlier. We have been using dependency injection by type with the help of Autowired annotation from Spring.Something like this would inject the spring bean.But if we have more than one spring bean of one type then we use Qualifier Annotation along with Autowired which in facts injects the spring bean by name.An application context with :So now if we have two instances of StudentDao (studentDao1 and studentDao2), we can inject spring bean by name.Same thing can be achieved with Resource annotaion specified by JSR-250. So we can inject a bean into a field or single parameter method with this annotation. Autowired is little more flexible than Resource since it can be used with multi parameter method as well as constructors.We can inject bean by name with Resource annotation in the following manner.

@Target({ElementType.Field, ElementType.Parameter}) @Retention(RetentionPolicy.RUNTIME) @Qualifier public @Interface Student { }

@Component @Student public class StudentDao implements EntityDao { }

@Autowired @Student private EntityDao studentDao; // So the spring injects the instance of StudentDao here.

Type safe dependency injection in Spring 3Define a custom annotation using @QualifierTo identify the injected bean without specifying the name, we need to create a custom annotation. This is an equivalent procedure to the use of JSR 330 annotations(Inject) in CDI.Now assign this custom annotation to implementation of EntityDao Interface@Component tells Spring that this a bean definition. @Student annotation is used by Spring IoC to identify StudentDao as EntityDao's implementation whenever reference of EntityDao is used.Inject the bean using @Autowired and custom qualifierSomething like this.This makes less use of String-names, which can be misspelled and are harder to maintain.Feel free to express your doubts, suggestions and corrections (if any) on the post .