Yüklenen tüm bahar fasulyelerini yazdırın


95

Başlangıçta yüklenen tüm yay çekirdeklerini yazdırmanın bir yolu var mı? Spring 2.0 kullanıyorum.

Yanıtlar:


88

Evet, al ApplicationContextve ara.getBeanDefinitionNames()

İçeriği şu şekilde alabilirsiniz:

  • uygulama ApplicationContextAware
  • @Inject/ ile enjekte etmek @Autowired(2.5'ten sonra)
  • kullanım WebApplicationContextUtils.getRequiredWebApplicationContext(..)

İlgili: Bir BeanPostprocessorfasülyeyi kaydederek her bir fasulyenin kaydını da tespit edebilirsiniz . Her çekirdek için bildirilecektir.


1
ApplicationContextAwareArabirimi uygulamanın nedeni, Spring çerçevesinin ona uygulama bağlamına erişim şansı vermesidir. @ConfigurationAmaçlanan uygulama bağlamı için bunu sınıfa yerleştirmelisiniz .
smwikipedia


1
applicationContext.getBeanDefinitionNames (), BeanDefinition örneği olmadan kaydedilen çekirdekleri göstermez. Manuel olarak kaydedilen tekli fasulyeleri listeleyemezsiniz. örn- :) ortam, systemProperties, systemEnvironment fasulye listeleyemezsiniz. Ancak bu çekirdekler kapta mevcuttur. @Auwired Environment env vb. Kullanarak bunları otomatik olarak kablolayabilirsiniz. Stackoverflow.com/a/54863282/1840774
Velu

67
public class PrintBeans {
    @Autowired
    ApplicationContext applicationContext;

    public void printBeans() {
        System.out.println(Arrays.asList(applicationContext.getBeanDefinitionNames()));
    }
}

applicationContext.getBeanDefinitionNames (), BeanDefinition örneği olmadan kaydedilen çekirdekleri göstermez. Manuel olarak kaydedilen tekli fasulyeleri listeleyemezsiniz. örn- :) ortam, systemProperties, systemEnvironment fasulye listeleyemezsiniz. Ancak bu çekirdekler kapta mevcuttur. @Auwired Environment env vb. Kullanarak bunları otomatik olarak kablolayabilirsiniz. Stackoverflow.com/a/54863282/1840774
Velu

22

Tüm fasulye adlarını ve sınıflarını yazdırın:

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";
    }
}

1
applicationContext.getBeanDefinitionNames (), BeanDefinition örneği olmadan kaydedilen çekirdekleri göstermez. Manuel olarak kaydedilen tekli fasulyeleri listeleyemezsiniz. örn- :) ortam, systemProperties, systemEnvironment fasulye listeleyemezsiniz. Ancak bu çekirdekler kapta mevcuttur. @Auwired Environment env vb. Kullanarak bunları otomatik olarak bağlayabilirsiniz. Stackoverflow.com/a/54863282/1840774
Velu

19

Spring Boot ve aktüatör marş motoru ile

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

uç noktayı kontrol edebilirsiniz /beans


2
Soru Spring Boot değil , Spring 2.0 içindi .
TMN

8

applicationContext.getBeanDefinitionNames () yok değil kayıtlı fasulye göstermek olmadan BeanDefinition örneği.

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);
    }       
}

}


Konsol Çıkışı

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

Eğer çıktı, görebileceğiniz gibi çevre, systemProperties, systemEnvironment fasulye olacak değil kullanılarak gösterilir () context.getBeanDefinitionNames yöntemi.

Spring Boot

İlkbahar önyükleme web uygulamaları için, tüm çekirdekler aşağıdaki uç nokta kullanılarak listelenebilir.

@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", "environment", "systemProperties", "systemEnvironment", "org.springframework.context.annotation.internalConfigurationAnnotationProcessor", "org.springframework. internalCachingMetadataReaderFactory "," org.springframework.boot.autoconfigure.condition.BeanTypeRegistry "," org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry "," propertySourcesPlaceholindingConsptextRegistry "," propertySourcesPlaceholindingConsptextRegistry.sorot.proframework.configuration.configure , "preserveErrorControllerTargetClassPostProcessor "," org.springframework.context.annotation.internalAutowiredAnnotationProcessor "," org.springframework.context.annotation.internalRequiredAnnotationProcessor "," org.springframework.context.processation.connotation.context.context.connotation.connotation. ConfigurationPropertiesBindingPostProcessor "," org.springframework.scheduling.annotation.ProxyAsyncConfiguration "," org.springframework.context.annotation.internalAsyncAnnotationProcessor "," methodValidationPostProostagePostProostage "," embeddedServletourceContainegcessor "message"applicationEventMulticaster "," org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration $ EmbeddedTomcat "," tomcatEmbeddedServletContainerFactory "," org.springframework.boot.autoconfigure.webainciguration "$ TomcatEmbeddedServletContainer" org.springframework.boot.autoconfigure.web.HttpEncodingProperties "," org.springframework.boot.autoconfigure.web.HttpEncodingAutoConfiguration "," localeCharsetMappingsCustomizer "," org.springframework.boot.ebtofiguration "sunucu duplicateServerPropertiesDetector "," spring.resources-org.springframework.boot.autoconfigure.web.ResourceProperties "," org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration $ DefaultErrorViewResolverConfiguration "," conventionErrorViewResolver "," org.springframework.boot.eblet.ebtofiguration "," org.springframework.boot.eblet.ebtofiguration " 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" org. "exportController", "exportSpringframework" çizme.. autoconfigure.AutoConfigurationPackages "," org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration "," org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration $ JacksonspringFiguration " JacksonProperties "," standardJacksonObjectMapperBuilderCustomizer "," org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration $ JacksonObjectMapperBuilderConfiguration "," org.springframework.boot.autoconfigure.jackson.Jackson "org.springframework.boot.autoconfigure.jacksonfiguration" boot.autoconfigure.jackson.JacksonAutoConfiguration $ JacksonObjectMapperConfiguration "," jacksonObjectMapper "," org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration "," org.springframework.boot.autoconfigure.web.EmbameCiguration " , "org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration", "defaultValidator", "org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration $ WhitelabelErrorViewCutesonfiguration", "hata görünümü", "hata" , "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.vc, ","requestMappingHandlerAdapter", "mvcResourceUrlProvider", "requestMappingHandlerMapping", "mvcPathMatcher", "mvcUrlPathHelper", "viewControllerHandlerMapping", "beanNameHandlerMapping", "", "resourceHandlerMapping defaultServletHandlerMapping", "mvcUriComponentsContributor", "httpRequestHandlerAdapter", "simpleControllerHandlerAdapter", "handlerExceptionResolver" , "mvcViewResolver", "org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration $ WebMvcAutoConfigurationAdapter $ FaviconConfiguration", "faviconRequestHandler", "faviconHandlerMapping", "defaultViewResolverviewResolver "," welcomePageHandlerMapping "," org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration "," objectNamingStrategy "," mbeanServer "," mbeanExporter "," org.springAppringAppframework.boot.autoconfiglication.RminAutoconfigure " , "org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration", "org.springframework.boot.autoconfigure.web.JacksonHttpMessageConvertersCfigonfiguration", "springInfo-org.springframework.boot.Properties" org.springframework.boot.PropertiesAutoConfiguration " springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration "," multipartResolver "," org.springframework.boot.autoconfigure.web.WebClientAutoConfiguration $ RestTemplateConfiguration "," restTemplateBuilder "," org.springframework.boot.autoconfigure.web.WebClientAutoConfiguration "," spring.devramtools-org.bo.profiguration " org.springframework.boot.devtools.autoconfigure.LocalDevToolsAutoConfiguration $ RestartConfiguration " "fileSystemWatcherFactory", "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 "]


6

Aramayı deneyebilirsin

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

Veya için hata ayıklama günlüğünü açın org.springframework. (İlkbahar önyüklemesinde, bu bir parametre kullanıyor --logging.level.org.springframework=DEBUG)


ListableBeanFactorybir arayüzdür. Yöntemi getBeansOfTypeveya arabirimdeki başka bir yöntemi yürütmek için bu arabirimi genişleten bir sınıfın örneği nereden alınır ? Bunun ApplicationContextonu genişlettiğini görüyorum , ancak örneğiniz bunlardan birini nasıl elde edeceğinizi göstermiyor.
ErikE

Sadece bir alan ekleyebilir @Autowired ListableBeanFactory listableBeanFactoryve bir alan elde edersiniz (uygulama türü önemli olmamalıdır)
artbristol

1

Kullanarak spring-boot-starter-actuatortüm fasulyeye kolayca erişebilirsiniz.

Kurulum süreci şu şekildedir:

  1. Gradle'a bağımlılık ekleyin :

Aşağıyı gradle dosyasına ekleyin:

compile("org.springframework.boot:spring-boot-starter-actuator")
  1. Application.properties üzerinde güvenliği etkinleştirin :

management.security.enabled=falseApplication.property dosyanıza ekleyin

  1. call / fasulye uç noktası :

    Bu kurulumdan sonra yay, metriklerle ilgili bazı uç noktaları etkinleştirecektir. Bitiş noktalarından biri / fasulye Bu uç noktaları çağırdıktan sonra, bağımlılığı ve kapsamı dahil olmak üzere tüm çekirdeğinizi içeren bir json dosyası sağlayacaktır.

Örnek bir json dosyası:

[{"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":[]}]

Daha fazla bilgi için aşağıdaki bağlantıları ziyaret edin:

Umarım bu sana yardımcı olur. Teşekkürler :)


1
bahar! = ilkbahar-çizme
Himanshu Bhardwaj

Evet, bu gerçek kardeş :). Bu çözüm sprint önyüklemesi içindir.
Md. Sajedul Karim

1

İşte tüm fasulye adlarını yay uygulaması bağlamından yazdırmanın başka bir yolu:

import java.util.Arrays;
import java.util.concurrent.atomic.AtomicInteger;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

/***********************************************************************************************************
 * Java File: MainApplication.java
 * Description: Main class to run the application.
 * 
 ***********************************************************************************************************/

@SpringBootApplication
public class MainApplication {

private static final Logger logger = LogManager.getLogger(MainApplication.class);

public static void main(String[] args) 
{
    final ConfigurableApplicationContext context = SpringApplication.run(MainApplication.class, args);

    final AtomicInteger counter = new AtomicInteger(0);
    logger.info("**************** START: Total Bean Objects: {} ******************", context.getBeanDefinitionCount());

    Arrays.asList(context.getBeanDefinitionNames())
    .forEach(beanName -> {
        logger.info("{}) Bean Name: {} ", counter.incrementAndGet(), beanName);
    });

    logger.info("**************** END: Total Bean: {} ******************", context.getBeanDefinitionCount());
}

}


Sample Output:

2019-11-27 20:08:02.821 INFO  [main] [c.c.a.MainApplication:18] - **************** START: Total Bean Objects: 564 ****************** 
...........................
2019-11-27 20:08:02.821 INFO  [main] [c.c.a.MainApplication:22] - 460) Bean Name: mvcPathMatcher  
2019-11-27 20:08:02.821 INFO  [main] [c.c.a.MainApplication:22] - 461) Bean Name: mvcUrlPathHelper  
2019-11-27 20:08:02.821 INFO  [main] [c.c.a.MainApplication:22] - 462) Bean Name: viewControllerHandlerMapping  
2019-11-27 20:08:02.821 INFO  [main] [c.c.a.MainApplication:22] - 463) Bean Name: beanNameHandlerMapping  
2019-11-27 20:08:02.821 INFO  [main] [c.c.a.MainApplication:22] - 464) Bean Name: resourceHandlerMapping 
...........................
2019-11-27 20:08:02.821 INFO  [main] [c.c.a.MainApplication:25] - **************** END: Total Bean: 564 ****************** 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.