2013-07-05 1 views
1

Javadoc в SqlSessionDaoSupport классе говорит:в mybatis автоматического связывание пружины 1.2.0

... @ Autowired был удален из setSqlSessionTemplate и setSqlSessionFactory в версии 1.2.0.

Почему? В этом случае я должен Мануалы установить sqlSessionFactory моего DAOS, а также тестировать классы (я использую DBUnit для ПЕРСИСТЕНТНОСТИ тестов)

+0

Попробуйте ввести его из контекстного файла xml – Elbek

+0

У меня есть более 50 daos, которые расширяют этот класс, и daos объявляются с помощью компонента-сканирования. Вы предлагаете mannualy объявить 50 даос в xml? – maks

+0

также у меня много тестовых классов, которые также расширяют этот класс (возможно, не напрямую). Должен ли я также объявлять тестовые классы в XML-файле? – maks

ответ

2

@Autowired был удален по этому вопросу: https://code.google.com/p/mybatis/issues/detail?id=763

В рамках общей цели, MyBatis не следует делать сильные утверждения, такие как «В ApplicationContext есть только один sqlSessionFactory», поэтому @Autowired был удален.

В качестве обходного пути, вы можете написать свой собственный MyAppSqlSessionDaoSupport, который расширяет SqlSessionDaoSupport, и переопределить setSqlSessionFactory(...) с

@Autowired 
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) { 
    if (!this.externalSqlSession) { 
    this.sqlSession = new SqlSessionTemplate(sqlSessionFactory); 
    } 
} 

Затем сделать ваши объекты DAO расширяет MyAppSqlSessionDaoSupport вместо SqlSessionDaoSupport.

+0

Мне кажется, что я должен написать класс, который переопределяет этот метод и расширяет все мои классы из этого класса, но вопрос был в целях удаления этой аннотации. Хорошо, есть некоторые проблемы с Autwiring sqlSessionFactory и шаблоном, почему бы не удалить только одну аннотацию? – maks

+0

Не было очевидно, что вы это знали, глядя на свой вопрос и свои комментарии. Тем не менее, что неясно с тем фактом, что '@ Autowired' утверждает, что в контексте приложения существует только один компонент определенного типа, тогда как их может быть несколько? Одно приложение может иметь несколько SqlSessionFactory, а другое может иметь несколько SqlSessionTemplate. –

+0

Насколько я знаю, весна будет генерировать исключение при запуске, когда более одного бока претендуют на автоволну – maks

Смежные вопросы