Como usar autowire do Spring a partir do método main()

{lang: 'pt-BR'}

Que o Spring é um framework fantástico, eu não preciso dizer. Seus projetistas criaram, a partir de um paradigma de container IOC, um ecossistema de frameworks que nos auxiliam em inúmeras tarefas, desde testes unitários a controle transacional, passando por segurança, MVC entre outras.

Algumas vezes precisamos rodar o Spring a partir de uma aplicação standalone (aquela que possui o método main()). Isso não é lá muito complicado, mas é interessante perceber que podemos usar todos os recursos do Spring, inclusive as anotações @Autowired, mesmo na classe que possui o método main.

Para inicializarmos o Spring, usalmente fornecemos um arquivo XML de configuração do ApplicationContext. A diferença agora é que iremos solicitar ao próprio Spring que inicialize a classe que contém o método main, e faça uso das anotações de @Autowired que estamos usando.

Veja o exemplo de uma classe que depende de um bean de serviço:

@Component
public class MyApplication{
	
        @Autowired
        private IMyService myService;

	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("config.xml");
		MyApplication app = context.getBean(MyApplication.class);		
		app.start()
	}

	private void start(){
	        myService.doSomething();
                // ...
	}
}

@Service 
public class MyService implements IMyService {
    public String doSomething() {
        // ...
    }
}

O arquivo config.xml deverá estar localizado no classpath da aplicação. Se estiver usando Maven, coloque na pasta src/main/resource

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

  <context:annotation-config />
  <context:component-scan base-package="mypackage" />

</beans>

Se você quer saber como criar uma aplicação standalone com um único JAR e todas as suas dependências usando o Maven, leia o artigo que escrevi sobre o assunto.

{lang: 'pt-BR'}