Saltar al contenido

Uso de Spring 3 autowire en una aplicación Java independiente

Nuestros programadores estrellas han agotado sus depósitos de café, en su búsqueda diariamente por la solución, hasta que Óscar encontró el resultado en GitHub por lo tanto hoy la compartimos con nosotros.

Solución:

Spring funciona en una aplicación independiente. Está utilizando la forma incorrecta de crear un frijol de primavera. La forma correcta de hacerlo así:

@Component
public class Main 

    public static void main(String[] args) 
        ApplicationContext context = 
            new ClassPathXmlApplicationContext("META-INF/config.xml");

        Main p = context.getBean(Main.class);
        p.start(args);
    

    @Autowired
    private MyBean myBean;
    private void start(String[] args) 
        System.out.println("my beans method: " + myBean.getStr());
    


@Service 
public class MyBean 
    public String getStr() 
        return "string";
    

En el primer caso (el de la pregunta), está creando el objeto usted mismo, en lugar de obtenerlo del contexto de Spring. Así que Spring no tiene la oportunidad de Autowire las dependencias (lo que hace que el NullPointerException).

En el segundo caso (el de esta respuesta), obtienes el bean del contexto de Spring y, por lo tanto, está administrado por Spring y Spring se encarga de autowiring.

Spring se está alejando de los archivos XML y usa mucho las anotaciones. El siguiente ejemplo es una aplicación Spring independiente simple que utiliza anotaciones en lugar de archivos XML.

package com.zetcode.bean;

import org.springframework.stereotype.Component;

@Component
public class Message 

   private String message = "Hello there!";

   public void setMessage(String message)

      this.message  = message;
   

   public String getMessage()

      return message;
   

Este es un frijol simple. Está decorado con el @Component anotación para detección automática por contenedor Spring.

package com.zetcode.main;

import com.zetcode.bean.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;

@ComponentScan(basePackages = "com.zetcode")
public class Application 

    public static void main(String[] args) 

        ApplicationContext context
                = new AnnotationConfigApplicationContext(Application.class);

        Application p = context.getBean(Application.class);
        p.start();
    

    @Autowired
    private Message message;
    private void start() 
        System.out.println("Message: " + message.getMessage());
    

Este es el principal Application clase. los @ComponentScan la anotación busca componentes. los @Autowired anotación inyecta el bean en el message variable. los AnnotationConfigApplicationContext se utiliza para crear el contexto de la aplicación Spring.

El tutorial de My Standalone Spring muestra cómo crear una aplicación Spring independiente con XML y anotaciones.

Para Spring 4, usando Spring Boot podemos tener el siguiente ejemplo sin usar el antipatrón de obtener el Bean directamente desde ApplicationContext:

package com.yourproject;

@SpringBootApplication
public class TestBed implements CommandLineRunner 

    private MyService myService;

    @Autowired
    public TestBed(MyService myService)
        this.myService = myService;
    

    public static void main(String... args) 
        SpringApplication.run(TestBed.class, args);
    

    @Override
    public void run(String... strings) throws Exception 
        System.out.println("myService: " + MyService );
    



@Service 
public class MyService
    public String getSomething() 
        return "something";
    

Asegúrese de que todos sus servicios inyectados estén bajo com.yourproject o sus subpaquetes.

Puedes proteger nuestra ocupación poniendo un comentario o dejando una valoración te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *