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

Пример пружины со слабой связью

– Пример пружины со слабой связью

Концепция объектно-ориентированного – это хороший дизайн, позволяющий разбить вашу систему на группу повторно используемых объектов. Однако, когда система становится больше, особенно в проекте 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/”