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.