Распечатать все загруженные бобы Spring - PullRequest
77 голосов
/ 07 марта 2012

Есть ли способ напечатать все пружинные бобы, которые загружаются при запуске? Я использую Spring 2.0.

Ответы [ 7 ]

80 голосов
/ 07 марта 2012

Да, получите ApplicationContext и позвоните .getBeanDefinitionNames()

Вы можете получить контекст:

  • реализуя ApplicationContextAware
  • , вводя егос @Inject / @Autowired (после 2.5)
  • use WebApplicationContextUtils.getRequiredWebApplicationContext(..)

Связанный: Вы также можете обнаружить регистрацию каждого компонента, зарегистрировав компонент BeanPostprocessor.Он будет уведомлен для каждого компонента.

61 голосов
/ 04 июня 2014
public class PrintBeans {
    @Autowired
    ApplicationContext applicationContext;

    public void printBeans() {
        System.out.println(Arrays.asList(applicationContext.getBeanDefinitionNames()));
    }
}
19 голосов
/ 07 марта 2015

Вывести все имена бинов и их классы:

package com.javahash.spring.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class HelloWorldController {

    @Autowired
    private ApplicationContext applicationContext;

    @RequestMapping("/hello")
    public String hello(@RequestParam(value="key", required=false, defaultValue="World") String name, Model model) {

        String[] beanNames = applicationContext.getBeanDefinitionNames();

        for (String beanName : beanNames) {

            System.out.println(beanName + " : " + applicationContext.getBean(beanName).getClass().toString());
        }

        model.addAttribute("name", name);

        return "helloworld";
    }
}
16 голосов
/ 09 августа 2016

с пружинным чехлом и пускателем привода

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Вы можете проверить конечную точку /beans

6 голосов
/ 07 марта 2012

Вы можете попробовать позвонить

org.springframework.beans.factory.ListableBeanFactory.getBeansOfType(Object.class)

или включить ведение журнала отладки для org.springframework.(При весенней загрузке используется параметр --logging.level.org.springframework=DEBUG)

5 голосов
/ 25 февраля 2019

applicationContext.getBeanDefinitionNames () не не показывает компоненты, которые зарегистрированы без экземпляра BeanDefinition.

package io.velu.core;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan
public class Core {

public static void main(String[] args) {
    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Core.class);
    String[] singletonNames = context.getDefaultListableBeanFactory().getSingletonNames();
    for (String singleton : singletonNames) {
        System.out.println(singleton);
    }       
}

}


Консольный вывод

environment
systemProperties
systemEnvironment
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
messageSource
applicationEventMulticaster
lifecycleProcessor

Как видно из вывода, environment, systemProperties, systemEnvironment bean-компоненты будут не показываться с использованием context.getBeanDefinitionNames () метода.

Spring Boot

Для веб-приложений с весенней загрузкой все компоненты могут быть перечислены с помощью приведенной ниже конечной точки.

@RestController
@RequestMapping("/list")
class ExportController {

@Autowired
private ApplicationContext applicationContext;

@GetMapping("/beans")
@ResponseStatus(value = HttpStatus.OK)
String[] registeredBeans() {
    return printBeans();
}

private String[] printBeans() {
    AutowireCapableBeanFactory autowireCapableBeanFactory = applicationContext.getAutowireCapableBeanFactory();
    if (autowireCapableBeanFactory instanceof SingletonBeanRegistry) {
        String[] singletonNames = ((SingletonBeanRegistry) autowireCapableBeanFactory).getSingletonNames();
        for (String singleton : singletonNames) {
            System.out.println(singleton);
        }
        return singletonNames;
    }
    return null;
}

}


[ "AutoConfigurationReport", "springApplicationArguments", "SpringBootBanner", "SpringBootLoggingSystem", "среда", "свойства системы", "SystemEnvironment", "Org.springframework.context.annotation.internalConfigurationAnnotationProcessor", "Org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory", "Org.springframework.boot.autoconfigure.condition.BeanTypeRegistry", "Org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry", "PropertySourcesPlaceholderConfigurer", "Org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.store", "PreserveErrorControllerTargetClassPostProcessor", "Org.springframework.context.annotation.internalAutowiredAnnotationProcessor", "Org.springframework.context.annotation.internalRequiredAnnotationProcessor", "Org.springframework.context.annotation.internalCommonAnnotationProcessor", "Org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor", "Org.springframework.scheduling.annotation.ProxyAsyncConfiguration", "Org.springframework.context.annotation.internalAsyncAnnotationProcessor", "MethodValidationPostProcessor", "EmbeddedServletContainerCustomizerBeanPostProcessor", "ErrorPageRegistrarBeanPostProcessor", "MessageSource", "ApplicationEventMulticaster", "Org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration $ EmbeddedTomcat", "TomcatEmbeddedServletContainerFactory", "Org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration $ TomcatWebSocketConfiguration", "WebsocketContainerCustomizer", "spring.http.encoding-org.springframework.boot.autoconfigure.web.HttpEncodingProperties", "Org.springframework.boot.autoconfigure.web.HttpEncodingAutoConfiguration", "LocaleCharsetMappingsCustomizer", "Org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration", "serverProperties", "DuplicateServerPropertiesDetector", "spring.resources-org.springframework.boot.autoconfigure.web.ResourceProperties", "Org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration $ DefaultErrorViewResolverConfiguration", "ConventionErrorViewResolver", "Org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration", "ErrorPageCustomizer", "ServletContext", "contextParameters", "contextAttributes", "Spring.mvc-org.springframework.boot.autoconfigure.web.WebMvcProperties", "Spring.http.multipart-org.springframework.boot.autoconfigure.web.MultipartProperties", "Org.springframework.boot.autoconfigure.web.MultipartAutoConfiguration", "MultipartConfigElement", "Org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration $ DispatcherServletRegistrationConfiguration", "Org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration $ DispatcherServletConfiguration", "DispatcherServlet", "DispatcherServletRegistration", "RequestContextFilter", "Org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration", "HiddenHttpMethodFilter", "HttpPutFormContentFilter", "CharacterEncodingFilter","org.springframework.context.event.internalEventListenerProcessor", "org.springframework.context.event.internalEventListenerFactory", "reportGeneratorApplication", "exportController", "exportService", "org.springfaug.conf".springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration», "org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration $ Jackson2ObjectMapperBuilderCustomizerConfiguration", "spring.jackson-org.springframework.boot.autoconfigure.jackson.JacksonProperties", "standardJacksonObjectMapperBuilderCustomizer",«org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration $ JacksonObjectMapperBuilderConfiguration», «org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration»,$ JacksonObjectMapperConfiguration "," jacksonObjectMapper "," org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration "," org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration "," org.springframework.boot.ValidationAutoConfiguration "," defaultValidator "," org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration $ EnableWebMvcConfiguration " "org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration $ WebMvcAutoConfigurationAdapter", "mvcContentNegotiationManager", "org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration $ StringHttpMessageConverterConfiguration", "stringHttpMessageConverter"," org.springframework.boot.autoconfigure.web.JacksonHttpMessageConvertersConfiguration $ MappingJackson2HttpMessageConverterConfiguration " "mappingJackson2HttpMessageConverter", "org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration", "messageConverters", "mvcConversionService", "mvcValidator", "requestMappingHandlerAdapter", "mvcResourceUrlProvider", "requestMappingHandlerMapping", "mvcPathMatcher","mvcUrlPathHelper " "viewControllerHandlerMapping", "beanNameHandlerMapping", "resourceHandlerMapping", "defaultServletHandlerMapping", "mvcUriComponentsContributor", "httpRequestHandlerAdapter", "simpleControllerHandlerAdapter", "handlerExceptionResolver", "mvcViewResolver"," org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration $ WebMvcAutoConfigurationAdapter $ FaviconConfiguration "," faviconRequestHandler "," faviconHandlerMapping "," defaultViewResolver "," viewResolver "," welcomePageHandlerMapping ","mbeanExporter "," org.springframework.boot.autoconfigure.admin.autoconfigure.info.ProjectInfoProperties "," org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration "," multipartResolver "," org.springframework.boot.autoconfigure.web.«org.springframework.boot.autoconfigure.web.WebClientAutoConfiguration», «spring.devtools-org.springframework.boot.devtools.autoconfigure.DevToolsProperties», «org.springframework.boot." "classPathRestartStrategy", "classPathFileSystemWatcher", "hateoasObjenesisCacheDisabler", "org.springframework.boot.devtools.autoconfigure.LocalDevToolsAutoConfiguration $ LiveReloadConfiguration $ LiveReloadServerConfiguration", "org.springframework.boot.devtools.autoconfigure.LocalDevToolsAutoConfiguration $ LiveReloadConfiguration"," optionalLiveReloadServer"," org.springframework.boot.devtools.autoconfigure.LocalDevToolsAutoConfiguration "," lifecycleProcessor "]

1 голос
/ 18 октября 2018

Используя spring-boot-starter-actuator, вы можете легко получить доступ ко всем бобам.

Вот процесс установки:

  1. Добавить зависимость в gradle :

Добавить ниже в файл Gradle:

compile("org.springframework.boot:spring-boot-starter-actuator")
  1. Включить защиту для application.properties :

Добавьте management.security.enabled=false в файл application.property

  1. конечная точка вызова / бина :

    После этого установочная пружина активирует некоторые конечные точки, связанные с метриками. Одна из его конечных точек - / beans После вызова этой конечной точки он предоставит файл json, содержащий весь ваш компонент, включая его зависимость и область действия.

Вот пример файла json:

[{"context":"application:8442","parent":null,"beans":[{"bean":"beanName","aliases":[],"scope":"singleton","type":"packageName$$4b46c703","resource":"null","dependencies":["environment","beanName1","beanName2"]},{"bean":"org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory","aliases":[],"scope":"singleton","type":"org.springframework.core.type.classreading.CachingMetadataReaderFactory","resource":"null","dependencies":[]}]

Для получения дополнительной информации посетите ссылки ниже:

Надеюсь, это поможет вам. Спасибо:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...