Рубрики
Без рубрики

Как использовать свои карьеры, JAVA зная инъекции зависимостей Spring.

Изучать Spring Framework и технологии программы, для облегчения процессе развития…. С пометкой java, учебное пособие.

Изучать Spring Framework и технологии, инструмент для облегчения разработки JAVA, безусловно, столкнетесь с инъекции зависимостей. Возможно, как и я, уже не понять, очень, но пришло время развязать его.

Один из объектов является, как контейнер spring управляет всем циклом из зависимостей проекта. Чтобы понять это, я познакомлю вас с понятием инверсии зависимостей, после чего мы увидим на практике, как использовать это, чтобы облегчить и заработать ловкость в процессе разработки или сопровождения JAVA-проекта.

1 – Пружина Контейнера. 2 – Настройка зависимостей вручную. 3 – Концепции внедрения зависимостей. 4 – Создание Bean под контролем Spring. 5 – путем Введения зависимостей конструктора. 6 – путем Введения зависимостей с помощью метода Setter. 7 – путем Введения зависимостей в атрибут.

Пружина контейнера

При разработке проекта с Spring Framework, классы будут созданы, мы определяем все, что необходимо для вашей работы, IoC-Контейнер, несет ответственность за управление этими зависимостями. IoC container, способствует то, что мы называем инверсия зависимостей и использует Инъекции зависимостей для получения этого обращения. Normalmente, ao criar objectos JAVA, fazemos a instanciaçao durante o ucoz, com o новый объект(); . Это может быть довольно трудоемкий и нудный, вот пример класса контроллера DAO (Data Access Object), который имеет целью загрузки данных клиента в базе данных.

Настройка зависимостей вручную.

Класс ClienteController

public class ClienteController {

   ClienteDAO clienteDao;

   public Cliente salvar(Cliente cliente) {
      clienteDao = new ClienteDAO();
      return clienteDao.add(cliente);
   }

   public List listarTodos() {
      clienteDao = new ClienteDAO();
      return clienteDao.list();
   }

   public Cliente alterar(Cliente cliente) {
      clienteDao = new ClienteDAO();
      return clienteDao.add(cliente);
   }

   public void excluir(Cliente cliente) {
      clienteDao = new ClienteDAO();
      clienteDao.remove(cliente);
   }

   public Cliente consultaPorId(Long id) {
      clienteDao = new ClienteDAO();
      return clienteDao.findById(id);
   }
}

Обратите внимание, что я должен вручную создать экземпляр моего clienteDao, класс ClienteController проходит так, есть зависимость, то необходимо ClienteDaO, чтобы она работала. Вот еще один пример, теперь в классе ClienteDAO, где я должен создать и открыть все подключения к базе данных:

Класс ClienteDAO

public class ClienteDAO implements DataAcessObject {

    private PreparedStatement query = null;
    private ResultSet rs = null;

    @Override
    public List list() {
        Connection conn = ConnectionFactory.abrirConexao(); /* instanciando o objeto */
        String sql = "Select * from clientes where not ind_deletado";
        List clientes = new ArrayList();
        Cliente cliente = null;

        try {
            query = conn.prepareStatement(sql);
            rs = query.executeQuery();
            while (rs.next()) {
                cliente = new Cliente(rs.getString("nome"), rs.getString("telefone"), rs.getString("email"));
                clientes.add(cliente);
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            ConnectionFactory.fecharConexao(conn, query, rs);
        }
        return clientes;

    }

    @Override
    public List findByName(String name) {
        Connection conn = ConnectionFactory.abrirConexao();/* instanciando o objeto */
        String sql = "Select * from clientes where not ind_deletado and nome like ? ";
        List clientes = new ArrayList();
        Cliente cliente = null;

        try {
            query = conn.prepareStatement(sql);
            query.setString(1, "%" + name + "%");
            rs = query.executeQuery();
            while (rs.next()) {
                cliente = new Cliente(rs.getString("nome"), rs.getString("email"), rs.getString("telefone"));
                clientes.add(cliente);
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            ConnectionFactory.fecharConexao(conn, query, rs);
        }

        return clientes;
    }
/*Outros métodos da interface...*/
}

Да, форма месмы не требует предшествующей цели, поэтому я хочу, чтобы она была такой же зависимой, как у меня, чтобы установить мгновенное соединение, подготовленное утверждение, набор результатов. Это традиционный способ, где мы заявляем зависимостей вручную, в каждый класс или метод, это способствует муфты, что усложняет техническое обслуживание. Концепция безопасности данных, – это что, все открытое соединение, должны быть закрыты, также мы это делаем hard-code. Na classe clientedao, os métodos попробуем, поймаем e наконец. В заключение, это момент, когда приложение определяет, что не нужно больше объекта Connection conn; и он может быть удален. Открытие соединения с базой данных, долговременных обработки, spring может упростить это действие, открыв связи в начале применения, удерживая ее во время всего процесса, это Singleton, так что мы будем использовать Spring, чтобы сделать эти параметры, чтобы более умные и упрощенный.

Концепции внедрения зависимостей.

Инъекции Зависимостей, D. I или Dependency Injection, относится идея-то, что приходит извне, Мок обязан создавать, настраивать и устанавливать зависимости из нашего класса. Бин, как любой объект, который будет управляться, IoC-Контейнер-это призвание. Классы домена, как Клиент класса, не должны быть Фасоль, потому что не хочу, чтобы создать несколько объектов типа Клиента, когда приложение запускается, мы сделаем это вручную, где это необходимо, правильной формы, используем инъекции зависимостей, как правило, в классы обслуживания или DAO.

Как Spring Работает:

Создание Bean под контролем Spring.

Теперь, когда мы знаем концепции внедрения зависимостей, и как она работает, давайте посмотрим, как облегчить его с помощью инструмента. У нас есть несколько точек Впрыска, в Spring framework, мы можем настроить его в xml-файлы, но мы будем делать с помощью заметок, не потому, что они лучше, чем xml, но по контексту, что-это поиск практичности. Обозначения являются зарезервированными словами, framework, метаданные, которые мы используем, чтобы забить методов, классов или заявление, атрибут. В IoC Контейнер, только может управлять компонентами Spring, по этой причине мы договорились, классы, @Component или по-прежнему с @Controller , @Repository , @Service все они @Component и могут управляться с помощью spring. Итак, давайте помечать класс ClienteDAO с @Repository, и мы сделаем конструктор в классе ClienteController, он будет нашей первой точкой инъекции.

Класс ClienteDAO теперь с @Repository

@Repository
public class ClienteDAO implements DataAcessObject {

    private PreparedStatement query = null;
    private ResultSet rs = null;

    public ClienteDAO() {
        System.out.println("EU CHAMEI O CLIENTE DAO AO INICIAR");
    }

    @Override
    public List list() {
        Connection conn = ConnectionFactory.abrirConexao(); /* instanciando o objeto */
        String sql = "Select * from clientes where not ind_deletado";
        List clientes = new ArrayList();
        Cliente c = null;

        try {
            query = conn.prepareStatement(sql);
            rs = query.executeQuery();
            while (rs.next()) {
                c = new Cliente(rs.getString("nome"), rs.getString("telefone"), rs.getString("email"));
                clientes.add(c);
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            ConnectionFactory.fecharConexao(conn, query, rs);
        }
        return clientes;

    }

    @Override
    public List findByName(String name) {
        Connection conn = ConnectionFactory.abrirConexao();/* instanciando o objeto */
        String sql = "Select * from clientes where not ind_deletado and nome like ? ";
        List clientes = new ArrayList();
        Cliente c = null;

        try {
            query = conn.prepareStatement(sql);
            query.setString(1, "%" + name + "%");
            rs = query.executeQuery();
            while (rs.next()) {
                c = new Cliente(rs.getString("nome"), rs.getString("email"), rs.getString("telefone"));
                clientes.add(c);
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            ConnectionFactory.fecharConexao(conn, query, rs);
        }

        return clientes;
    }

/*Outros métodos da classe*/

Путем введения зависимостей через конструктор.

Устанавливаем класс ClienteDAO, чтобы она есть компонент Spring, который можно найти на старт приложения путем маркировки @Repository , сейчас сделаем инъекцию зависимостей через конструктор Класса ClienteController. Таким образом, что контейнер Spring, при запуске приложения, он проверяет, что существует необходимость вставить в классе ClienteController какой-либо экземпляр объекта, в момент, когда приложение запускается, выполняется создание и методы clienteDao уже могут быть использованы в классе.

Класс ClienteController с аннотацией @Controller

@Controller
public class ClienteController {
    ClienteDAO clienteDao;

    public ClienteController(ClienteDAO clienteDao) {
        this.clienteDao = clienteDao;
    }
    public Cliente salvar(Cliente cliente) {
        return clienteDao.add(cliente);
    }
    public List listarTodos() {
        return clienteDao.list();
    }
    public Cliente alterar(Cliente cliente) {
        return clienteDao.add(cliente);
    }
    public void excluir(Cliente cliente) {
        clienteDao.remove(cliente);
    }
    public Cliente consultaPorId(Long id) {
        return clienteDao.findById(id);
    }
}

Путем введения зависимостей метод записи

Мы можем использовать метод Setter, чтобы сделать инъекцию зависимостей, класс ClienteDAO, остается такой же, мы будем изменить класс ClienteController, не будучи больше требуется конструктор. Мы используем метод Setter, чтобы установить атрибут ClienteDAO.

@Autowired-это аннотации, которые мы используем, чтобы сделать настройку метода setter, это то, что контейнер spring будет искать, чтобы сделать инъекцию.

Класс ClienteController с введением в метод Setter

@Controller
public class ClienteController {
    private ClienteDAO clienteDao;

    @Autowired
    public void setClienteDao(ClienteDAO clienteDao) {
        this.clienteDao = clienteDao;
    }

    public Cliente salvar(Cliente cliente) {
        return clienteDao.add(cliente);
    }
    public List listarTodos() {
        return clienteDao.list();
    }
    public Cliente alterar(Cliente cliente) {
        return clienteDao.add(cliente);
    }
    public void excluir(Cliente cliente) {
        clienteDao.remove(cliente);
    }
    @GetMapping("findId")
    @ResponseBody
    public Cliente consultaPorId(Long id) {
        return clienteDao.findById(id);
    }
}

Вводя зависимость атрибута.

В предыдущие параметры, изменяем конструктор и сделали метод setter, это уже облегчает развитие и делает код менее связаны, но мы можем сделать и более простой способ, см:

Класс ClienteController с давлением в атрибуте

@Controller
public class ClienteController {
    @Autowired
    private ClienteDAO clienteDao;

    public Cliente salvar(Cliente cliente) {
        return clienteDao.add(cliente);
    }
    public List listarTodos() {
        return clienteDao.list();
    }
    public Cliente alterar(Cliente cliente) {
        return clienteDao.add(cliente);
    }
    public void excluir(Cliente cliente) {
        clienteDao.remove(cliente);
    }
    @GetMapping("findId")
    @ResponseBody
    public Cliente consultaPorId(Long id) {
        return clienteDao.findById(id);
    }
}

Просто поместив заметку, я смогу получить доступ и использовать методы clienteDao без каких-либо проблем, это происходит потому, IoC-контейнер в обратном порядке, как все зависимости будут введены, взяв на себя эту ответственность. Каждый разработчик имеет свои привычки и практики, некоторые предпочитают использовать xml, чтобы оставить классами, более чистые, другие используют этот конструктор, но, безусловно, наиболее широко используемый мной в атрибут.

Вы уже знали концепции внедрения зависимостей и инверсия controller, я смог тебе помочь? Оставьте свой комментарий.

Artigo escrito para o desafio do curso Особенный весенний отдых да работы с водорослями

Ссылки: Документации Spring AlgaWorks – Инъекции зависимостей Spring Dev Media – Injeção de dependência JAVA JSR-330 Учебное пособие по внедрению зависимостей

Оригинал: “https://dev.to/w_brenneguer/como-alavancar-sua-carreira-java-conhecendo-a-injecao-de-dependencia-do-spring-4mh3”