Концепция объектно-ориентированного – это хороший дизайн, позволяющий разбить вашу систему на группу повторно используемых объектов. Однако, когда система становится больше, особенно в проекте Java, огромные зависимости объектов всегда будут тесно связаны, что приведет к тому, что объектами будет очень сложно управлять или изменять. В этом сценарии вы можете использовать Spring framework в качестве центрального модуля для простого и эффективного управления всеми зависимостями объектов.
Пример выходного генератора
Давайте рассмотрим пример, предположим, что в вашем проекте есть функция для вывода содержимого в формат Csv или Json. Ваш код может выглядеть следующим образом:
Файл: IOutputGenerator.java – Интерфейс для выходного генератора
package com.mkyong.output; public interface IOutputGenerator { public void generateOutput(); }
Файл: CsvOutputGenerator.java – Генератор вывода Csv для реализации интерфейса IOutputGenerator.
package com.mkyong.output.impl; import com.mkyong.output.IOutputGenerator; public class CsvOutputGenerator implements IOutputGenerator { public void generateOutput(){ System.out.println("Csv Output Generator"); } }
Файл: JsonOutputGenerator.java – Генератор вывода Json для реализации интерфейса IOutputGenerator.
package com.mkyong.output.impl; import com.mkyong.output.IOutputGenerator; public class JsonOutputGenerator implements IOutputGenerator { public void generateOutput(){ System.out.println("Json Output Generator"); } }
Есть несколько способов вызвать выходной генератор и как использовать пружину, чтобы объекты не были тесно связаны друг с другом.
1. Способ 1 – Вызовите его напрямую
Обычным способом, позвоните прямо.
package com.mkyong.common; import com.mkyong.output.IOutputGenerator; import com.mkyong.output.impl.CsvOutputGenerator; public class App { public static void main( String[] args ) { IOutputGenerator output = new CsvOutputGenerator(); output.generateOutput(); } }
Проблема Таким образом, проблема заключается в том, что “вывод” тесно связан с генератором вывода Csv, каждое изменение генератора вывода может включать изменение кода. Если этот код разбросан по всему вашему проекту, каждое изменение выходного генератора заставит вас серьезно страдать.
Способ 2 – Вызовите его с помощью вспомогательного класса
Вы можете подумать о создании вспомогательного класса, чтобы переместить всю выходную реализацию внутрь.
package com.mkyong.output; import com.mkyong.output.IOutputGenerator; import com.mkyong.output.impl.CsvOutputGenerator; public class OutputHelper { IOutputGenerator outputGenerator; public OutputHelper(){ outputGenerator = new CsvOutputGenerator(); } public void generateOutput(){ outputGenerator.generateOutput(); } }
Вызовите его через вспомогательный класс.
package com.mkyong.common; import com.mkyong.output.OutputHelper; public class App { public static void main( String[] args ) { OutputHelper output = new OutputHelper(); output.generateOutput(); } }
Проблема Это выглядит более элегантно, и вам нужно управлять только одним вспомогательным классом, однако вспомогательный класс по-прежнему тесно связан с CsvOutputGenerator, каждое изменение выходного генератора по-прежнему включает незначительное изменение кода.
Способ 3 – Пружина
В этом сценарии внедрение зависимостей весной (DI) является хорошим выбором. Пружина может сделать ваш выходной генератор слабо связанным с выходным генератором.
Незначительное изменение в выходном вспомогательном классе.
package com.mkyong.output; import com.mkyong.output.IOutputGenerator; public class OutputHelper { IOutputGenerator outputGenerator; public void generateOutput(){ outputGenerator.generateOutput(); } public void setOutputGenerator(IOutputGenerator outputGenerator){ this.outputGenerator = outputGenerator; } }
Создайте файл конфигурации Spring bean и объявите здесь все свои зависимости объектов Java.
Назовите это через весну
package com.mkyong.common; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.mkyong.output.OutputHelper; public class App { public static void main( String[] args ) { ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"Spring-Common.xml"}); OutputHelper output = (OutputHelper)context.getBean("OutputHelper"); output.generateOutput(); } }
Теперь вам просто нужно изменить XML-файл Spring для другого генератора вывода. Когда выходные данные изменены, вам нужно изменить только XML-файл Spring, код не изменен, это означает меньше ошибок.
Вывод
С Spring framework – внедрение зависимостей (DI) является полезной функцией для управления зависимостями объектов, она просто элегантна, очень гибка и облегчает обслуживание, особенно в больших проектах Java.
Оригинал: “https://mkyong.com/spring/spring-loosely-coupled-example/”