es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Servicio Spring o Util para una clase generadora en Java?

Tengo métodos generadores de códigos de barras que llamo desde el Controlador en mi proyecto de Java (Spring Boot). La clase generadora se muestra a continuación:

@Component
@NoArgsConstructor
public class QRCodeGenerator {
    private static final int LABEL_X_POS = 45;
    private static final int LABEL_Y_POS = 20;

    @Value("${qr-code.margin}")
    private int margin;

    @Value("${qr-code.fontSize}")
    private int fontSize;

    public ResponseEntity<resource> getQRCode(String data) throws IOException {

        // código omitido por brevedad

        addLabel(image, label);        
        final ByteArrayResource resource = new ByteArrayResource(toByteArray(image));
        return ResponseEntity.ok().body(resource);
    }

    private static byte[] toByteArray(BufferedImage image) throws IOException {
        // código omitido por brevedad
    }

    private void addLabel(BufferedImage source, String text) {
        int x = LABEL_X_POS;
        int y = LABEL_Y_POS;
        // código omitido por brevedad
    }
}

Al principio usé esta clase como estática, pero luego eliminé static para leer los datos en application.yml correctamente.

Aquí hay algunos puntos que necesito que se aclaren:

1. Soy nuevo en Spring y hasta ahora veo que los servicios de Spring se utilizan generalmente para proporcionar datos desde una base de datos o cualquier otro servicio, endpoints, etc. ¿Es eso cierto?

2. ¿Debo crear un servicio para la clase anterior (no necesito acceder a la base de datos en esa clase), o el enfoque es mejor (crearla como un componente e inyectarla en mi Controlador)?

3. Hay muchas opiniones diferentes con respecto a las clases Util estáticas. Entonces, ¿qué opinan de convertir esta clase en una clase Util estática? ¿Es mejor que ahora o usarla como un servicio de Spring?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Clase generadora de códigos de barras en un proyecto de Spring Boot

    Como experto en TI especializado en Java, Spring, Spring Boot, Service y Static, aquí están mis respuestas a las preguntas dadas:

    1. Sí, en general, los servicios de Spring se utilizan comúnmente para proporcionar datos desde bases de datos u otros servicios, puntos finales, etc. Sin embargo, también se pueden utilizar para proporcionar cualquier tipo de funcionalidad requerida por la aplicación, incluso si no implica acceso a datos. En este caso, la clase generadora de códigos de barras se puede considerar un servicio ya que proporciona funcionalidad y no requiere ningún acceso a base de datos.

    2. Depende de cómo se esté utilizando la clase en la aplicación. Si la clase generadora de códigos de barras solo se utiliza en un controlador, inyectarla como un componente y usarla directamente en el controlador es un enfoque adecuado. Sin embargo, si se necesita la misma funcionalidad de generación de códigos de barras en múltiples controladores, sería mejor crear un servicio y utilizarlo a través de la inyección de dependencias en los controladores. Pero dado que la clase generadora de códigos de barras no necesita acceder a una base de datos ni a servicios externos, se puede utilizar directamente en el controlador sin crear un servicio.

    3. Hay opiniones diferentes con respecto a las clases de utilidades estáticas y depende del caso de uso. En general, las clases de utilidades estáticas son útiles cuando se requiere un conjunto de métodos que no necesitan mantener un estado y no requieren que se creen objetos varias veces. Dado que la clase generadora de códigos de barras requiere que se mantenga cierto estado, como el margen y el tamaño de fuente, convertirla en una clase de utilidad estática puede requerir consideraciones adicionales. Por lo tanto, utilizarla como un componente o servicio de Spring, dependiendo del caso de uso, es un enfoque más adecuado.

Comments are closed.