2010-09-02 4 views
2

Im обучения Spring (2 и 3), и я получил этот метод в ClientDaoSpring JDBC DAO

public Client getClient(int id) { 
    List<Client> clients= getSimpleJdbcTemplate().query(
      CLIENT_GET, 
      new RowMapper<Client>() { 
       public Client mapRow(ResultSet rs, int rowNum) throws SQLException { 
        Client client = new ClientImpl(); // !! this (1) 
        client.setAccounts(new HashSet<Account>()); // !! this (2) 
        client.setId(rs.getInt(1)); 
        client.setName(rs.getString(2)); 
        return client; 
       } 
      },id 
      ); 
    return clients.get(0); 
} 

и следующей весной проводка:

<bean id="account" class="client.AccountRON" scope="prototype"> 
    <property name="currency" value = "RON" /> 
    <property name="ammount" value="0" /> 

</bean>  
<bean id="client" class="client.ClientImpl" scope="prototype"> 
    <property name="name" value="--client--" /> 
    <property name="accounts"> 
     <set> 
     </set> 
    </property> 
</bean> 

То, что я не люблю прокомментировали строки java-кода (1) и (2). Я собираюсь начать с (2), который, по моему мнению, является простым: есть ли способ, с помощью которого я могу подключить bean-компонент в файле .xml, чтобы сообщить Spring, чтобы создать реалистичную реализацию для «учетных записей» в ClientImpl? поэтому я могу избавиться от (2)

Теперь перейдем к (1): что произойдет, если реализация изменится? действительно ли мне нужно написать еще один DAO для другой реализации? или мне нужно построить BeanFactory? или есть еще одно прекрасное решение?

Спасибо!

ответ

3

Я немного смущен здесь - почему вы определили bean-компонент ClientImpl в своем XML-документе, но не используете его в своей Java?

Вашего уже есть большая часть решения, вам просто нужно получить новый ClientImpl от Spring каждых итераций через цикл:

private @Autowired BeanFactory beanFactory; 

public Client getClient(int id) { 
    List<Client> clients= getSimpleJdbcTemplate().query(
      CLIENT_GET, 
      new RowMapper<Client>() { 
       public Client mapRow(ResultSet rs, int rowNum) throws SQLException { 
        Client client = beanFactory.getBean(Client.class); 
        client.setId(rs.getInt(1)); 
        client.setName(rs.getString(2)); 
        return client; 
       } 
      },id 
    ); 
    return clients.get(0); 
} 

При таком подходе, фактическом строительстве и инициализации ClientImpl осуществляются весной , а не ваш код.

+0

Спасибо. Я не знаю, почему я, хотя, что фабрика в DAO была плохой. Теперь все нормально. Я, должно быть, устал. – Blitzkr1eg

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