Como obter todos os grãos gerenciados por primavera?
1. Visão geral
Neste artigo, exploraremos diferentes técnicas para exibir todos os beans gerenciados por Spring dentro do contêiner.
2. O contêiner IoC
Um bean é a base de um aplicativo gerenciado pelo Spring; todos os beans residem no contêiner do COI, responsável por gerenciar seu ciclo de vida.
Podemos obter uma lista de todos os beans nesse contêiner de duas maneiras:
-
Usando uma interfaceListableBeanFactory
-
Usando um atuador de inicialização por mola
3. Usando a interfaceListableBeanFactory
The ListableBeanFactory interface provides getBeanDefinitionNames() method que retorna os nomes de todos os beans definidos nesta fábrica. Essa interface é implementada por todas as fábricas de bean que pré-carregam suas definições de bean para enumerar todas as suas instâncias de bean.
Você pode encontrar a lista de todas as subinterfaces conhecidas e suas classes de implementação emthe official documentation.
Para este exemplo, usaremos um aplicativo Spring Boot.
Primeiro, vamos criar alguns feijões Spring. Vamos criar um controlador Spring simplesFooController:
@Controller
public class FooController {
@Autowired
private FooService fooService;
@RequestMapping(value="/displayallbeans")
public String getHeaderAndBody(Map model){
model.put("header", fooService.getHeader());
model.put("message", fooService.getBody());
return "displayallbeans";
}
}
Este controlador é dependente de outro bean SpringFooService:
@Service
public class FooService {
public String getHeader() {
return "Display All Beans";
}
public String getBody() {
return "This is a sample application that displays all beans "
+ "in Spring IoC container using ListableBeanFactory interface "
+ "and Spring Boot Actuators.";
}
}
Observe que criamos dois beans diferentes aqui:
-
fooController
-
fooService
Ao executar este aplicativo, usaremos o objetoapplicationContext e chamaremos seu métodogetBeanDefinitionNames(), que retornará todos os beans em nosso contêinerapplicationContext:
@SpringBootApplication
public class Application {
private static ApplicationContext applicationContext;
public static void main(String[] args) {
applicationContext = SpringApplication.run(Application.class, args);
displayAllBeans();
}
public static void displayAllBeans() {
String[] allBeanNames = applicationContext.getBeanDefinitionNames();
for(String beanName : allBeanNames) {
System.out.println(beanName);
}
}
}
Isso imprimirá todos os grãos do contêinerapplicationContext:
fooController
fooService
//other beans
Observe que, junto com os beans definidos por nós,it will also log all other beans that are in this container. Para fins de clareza, nós os omitimos aqui porque há muitos deles.
4. Usando Spring Boot Actuator
A funcionalidade Spring Boot Actuator fornece endpoints que são usados para monitorar as estatísticas de nosso aplicativo.
Inclui muitos endpoints integrados, incluindo /beans.. Isso exibe uma lista completa de todos os beans gerenciados Spring em nosso aplicativo. Você pode encontrar a lista completa de endpoints existentes emon the official docs.
Agora, vamos apenas atingir a URLhttp://<address>:<management-port>/beans. Podemos usar nossa porta de servidor padrão se não tivermos especificado nenhuma porta de gerenciamento separada. Isso retornará uma respostaJSON exibindo todos os beans dentro do contêiner Spring IoC:
[
{
"context": "application:8080",
"parent": null,
"beans": [
{
"bean": "fooController",
"aliases": [],
"scope": "singleton",
"type": "com.example.displayallbeans.controller.FooController",
"resource": "file [E:/Workspace/tutorials-master/spring-boot/target
/classes/com/example/displayallbeans/controller/FooController.class]",
"dependencies": [
"fooService"
]
},
{
"bean": "fooService",
"aliases": [],
"scope": "singleton",
"type": "com.example.displayallbeans.service.FooService",
"resource": "file [E:/Workspace/tutorials-master/spring-boot/target/
classes/com/example/displayallbeans/service/FooService.class]",
"dependencies": []
},
// ...other beans
]
}
]
Claro, isso também consiste em muitos outros grãos que residem no mesmo recipiente de mola, mas por uma questão de clareza, nós os omitimos aqui.
Se você quiser explorar mais sobre os Atuadores de inicialização do Spring, vá para o guiaSpring Boot Actuator principal.
5. Conclusão
Neste artigo, aprendemos como exibir todos os beans emSpring IoC Container usando a interfaceListableBeanFactory e Spring Boot Actuators.
Ofull implementation deste tutorial pode ser encontradoover on Github.