Поведение аннотаций @Autowired в Spring 3 - PullRequest
2 голосов
/ 17 ноября 2011

Я хотел понять, как именно работает аннотация @Autowired.

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;
    .
    .
    .
}

и bean-компонент объявлен в моем файле Spring applicationContext.xml:

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

При ближайшем рассмотрении вы увидите, что два идентификатора в классе Java и контекстном XML-файле различны.

workFlowDAO и

workflowDAO

[Буква 'f' отличается в двух идентификаторах]

Поскольку мое приложение работает нормально даже при такой конфигурации; Я хотел знать, как работает @Autowired аннотация, чтобы она не жаловалась, когда идентификаторы бина не совпадают точно.

В случае простого использования бобов; Spring бы пожаловался на несоответствие названий бобов.

Я запускаю приложение J2EE с Spring 3.0.5 на Websphere App Server 7.0

Дайте мне знать, если потребуется дополнительная информация.

Ответы [ 2 ]

6 голосов
/ 17 ноября 2011

@Autowired соответствует бобам по типу. Идентификатор не считается.

Если вы объявите другой bean-компонент такого же типа в конфигурации XML, Spring пожалуется на невозможность определить правильный bean-компонент.

Если вы хотите использовать идентификаторы вместе с @Autowired, вы можете сделать это, используя @Qualifier, хотя в этом случае рекомендуется @Resource.

Найдите дополнительную информацию по этой теме здесь .

1 голос
/ 17 ноября 2011

Полностью согласен с первым комментарием.

Если вы хотите, чтобы ваши бины были автоматически подключены по имени, вы можете рассмотреть возможность использования @Qualifier ("данное имя").

См. Все подробности:

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

...