внедрение производного свойства для bean-компонента @Repository без @Autowired в суперклассе

Я хотел бы использовать аннотацию @Repository spring, чтобы избежать добавления bean-компонента в context.xml. Я использую интеграцию с ibatis, поэтому мой класс репозитория выглядит следующим образом

@Repository("userDao")
public class UserDaoMybatis extends SqlMapClientDaoSupport implements UserDao {
    // ...
}

SqlMapClientDaoSupport (класс библиотеки Spring) имеет окончательный метод для установки необходимого свойства, которое не аннотируется @Autowired или @Resourse

public final void setSqlMapClient(SqlMapClient sqlMapClient) {
    if (!this.externalTemplate) {
        this.sqlMapClientTemplate.setSqlMapClient(sqlMapClient);
    }
}

bean-компонент SqlMapClient определен в spring context.xml . Если bean-компонент userDao определен в XML, он работает нормально, но когда я помещаю аннотацию @Repository и удаляю объявление bean-компонента, я получаю следующее исключение

java.lang.IllegalArgumentException: Property 'sqlMapClient' is required

Временным решением может быть добавление нового метода, такого как

@Aitowired
injectSqlMapClient(SqlMapClient sqlMapClient) {
    setSqlMapClient(sqlMapClient);
}

, но он выглядит некрасиво

Is есть ли другой способ ввести свойство без определения?

6
задан Eugene Platonov 27 September 2010 в 20:44
поделиться