Ayusman
Ayusman

Reputation: 8719

@Autowired annotations behavior in Spring 3

I wanted to understand how exactly the @Autowired annotation works.

import com.test.WorkFlowDAO;

public class ServiceCentralBOImpl implements IServiceCentralBO
{
    /**
     * Logger for logging functionality.
     */
    private static final Log log = LogFactory.getLog(ServiceCentralBOImpl.class);

    @Autowired
    private WorkFlowDAO workFlowDAO;
    .
    .
    .
}

and the bean is declared in my Spring applicationContext.xml file:

<bean id="workflowDAO" class="com.test.WorkFlowDAO">
</bean>

Upon closer inspection you can see the two IDs in the Java class and the context XML file are different.

workFlowDAO and

workflowDAO

[The letter 'f' is different in the two IDs]

Since my application runs just fine even with this configuration; I wanted to know, how does @Autowired annotation work so that it does not complain when the bean IDs do not match exactly.

In case of simple bean usage; Spring would have complained of mismatching bean names.

I am running a J2EE application with Spring 3.0.5 on Websphere App Server 7.0

Let me know if any more information is required.

Upvotes: 2

Views: 1119

Answers (2)

user998692
user998692

Reputation: 5256

Completely agree with the first comment.

If you want your beans to be autowired by name, you may consider using @Qualifier("givenName").

See for all details:

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html

Upvotes: 1

tobiasbayer
tobiasbayer

Reputation: 10379

@Autowired matches the beans by type. The ID is not considered.

If you declare another bean of the same type in your XML configuration, Spring would complain about not being able to determine the correct bean.

If you want to use IDs together with @Autowired you can do so by utilizing @Qualifier although @Resource is recommended in this case.

Find some more info on that topic here.

Upvotes: 6

Related Questions