четверг, 21 июня 2018 г.

Spring - класс JdbcTemplate и внедрение через конструктор - constructor injection.

Spring обеспечивает очень удобную поддержку JDBC с помощью класса JdbcTemplate, которому для работы необходимо только указать через конструктор реализацию DataSource при создании экземпляра JdbcTemplate.
Пусть например мы хотим воспользоваться паттерном DAO (Data Access Object - обьект доступа к данным ) - напишем свой класс DaoJDBC который расширяет класс JdbcTemplate и сделаем внедрение через конструктор бина, реализующего DataSource:
@Repository
public class DaoJDBC extends JdbcTemplate {
   
    @Inject   // или @Autowired
    public DaoJDBC(DataSource dataSource) {
        this.setDataSource(dataSource);
    }

    public void clearAll() {
        String sql = "delete from hosts";
        this.update(sql);
    }
.................// + другие операции с базой
}
 Здесь как раз и происходит внедрение через конструктор бина dataSource,  который мы рассматривали в предыдущей заметке. Дальше в классе DaoJDBC нам доступен весь инструментарий JdbcTemplate через this.
Можно сделать и по-другому - сделать реализацию бина JdbcTemplate в файле конфигурации приложения - а дальше внедрять его куда нам нужно и использовать:
@Inject   // или @Autowired
private JdbcTemplate jdbcTemplate;
В этом случае файл конфигурации приложения следующий:
@Configuration
@ComponentScan(basePackages = {"PKG"})
public class AppContext {

   @Bean(destroyMethod = "close")
    public DataSource dataSource() {
        BasicDataSource bds = new BasicDataSource();
        bds.setDriverClassName("org.apache.derby.jdbc.EmbeddedDriver");
        bds.setUrl("jdbc:derby:./db/primer");
        bds.setPassword("12345");
        bds.setUsername("romka");
        return bds;
    }
    
    @Bean
    public JdbcTemplate jdbcTemplate () {
        return new JdbcTemplate(this.dataSource());
    }
}
И еще - класс JdbcTemplate является безопасным в отношении потоков.
Исходники - https://sourceforge.net/projects/j-pkg/

Комментариев нет:

Отправить комментарий

Взаимодействие между приложениями и Watch Service

Взаимодействие между разными приложениями Java можно сделать с помощью файловой системы, базы данных и JMS. Рассмотрим случай ФС - в Java ...