लोड किए गए सभी स्प्रिंग बीन्स को प्रिंट करें


95

क्या स्टार्टअप पर लोड किए गए सभी स्प्रिंग बीन्स को प्रिंट करने का एक तरीका है? मैं स्प्रिंग 2.0 का उपयोग कर रहा हूं।

जवाबों:


88

हाँ, मिलें ApplicationContextऔर कॉल करें.getBeanDefinitionNames()

आप इसके द्वारा संदर्भ प्राप्त कर सकते हैं:

  • क्रियान्वयन ApplicationContextAware
  • @Inject/ @Autowired(2.5 के बाद) के साथ इसे इंजेक्ट करना
  • उपयोग WebApplicationContextUtils.getRequiredWebApplicationContext(..)

संबंधित: आप बीन दर्ज करके प्रत्येक बीन के पंजीकरण का भी पता लगा सकते हैं BeanPostprocessor। इसे प्रत्येक बीन के लिए अधिसूचित किया जाएगा।


1
ApplicationContextAwareइंटरफ़ेस को लागू करने का कारण यह है क्योंकि स्प्रिंग फ्रेमवर्क इसे एप्लिकेशन संदर्भ तक पहुंचने का मौका देता है। आपको इसे @Configurationइच्छित एप्लिकेशन संदर्भ के लिए कक्षा में रखना चाहिए ।
smwikipedia 8

एक संबंधित लिंक: stackoverflow.com/questions/14829258/…
smwikipedia

1
applicationContext.getBeanDefinitionNames () सेम को नहीं दिखाता है जो बीनडिफिनिशन उदाहरण के बिना पंजीकृत हैं। आप सिंगलटन बीन्स को सूचीबद्ध नहीं कर पाएंगे जो मैन्युअल रूप से पंजीकृत हैं। ex- :) आप पर्यावरण, systemProperties, सिस्टमइन्वायरमेंट बीन्स को सूचीबद्ध नहीं कर सकते। हालांकि ये फलियां कंटेनर में उपलब्ध हैं। आप @Auwired Environment env इत्यादि 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 () सेम को नहीं दिखाता है जो बीनडिफिनिशन उदाहरण के बिना पंजीकृत हैं। आप सिंगलटन बीन्स को सूचीबद्ध नहीं कर पाएंगे जो मैन्युअल रूप से पंजीकृत हैं। ex- :) आप पर्यावरण, systemProperties, सिस्टमइन्वायरमेंट बीन्स को सूचीबद्ध नहीं कर सकते। हालांकि ये फलियां कंटेनर में उपलब्ध हैं। आप उन्हें @Auwired Environment env आदि stackoverflow.com/a/54863282/1840774
Velu

22

सभी बीन के नाम और उसकी कक्षाएं प्रिंट करें:

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 () सेम को नहीं दिखाता है जो बीनडिफिनिशन उदाहरण के बिना पंजीकृत हैं। आप सिंगलटन बीन्स को सूचीबद्ध नहीं कर पाएंगे जो मैन्युअल रूप से पंजीकृत हैं। ex- :) आप पर्यावरण, systemProperties, सिस्टमइन्वायरमेंट बीन्स को सूचीबद्ध नहीं कर सकते। हालांकि ये फलियां कंटेनर में उपलब्ध हैं। आप @Auwired Environment env इत्यादि stackoverflow.com/a/54863282/1840774
Velu

19

स्प्रिंग बूट और एक्चुएटर स्टार्टर के साथ

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

आप समापन बिंदु की जांच कर सकते हैं /beans


2
सवाल स्प्रिंग 2.0 का था, स्प्रिंग बूट का नहीं
टीएमएन

8

applicationContext.getBeanDefinitionNames () सेम को नहीं दिखाता है जो बीनडिफिनिशन उदाहरण के बिना पंजीकृत हैं ।

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

जैसा कि आप आउटपुट में देख सकते हैं, पर्यावरण, systemProperties, systemEnvironment सेम को संदर्भ . getBeanDefinitionNames () विधि का उपयोग करके नहीं दिखाया जाएगा ।

स्प्रिंग बूट

वसंत बूट वेब अनुप्रयोगों के लिए, सभी बीन्स को नीचे दिए गए समापन बिंदु का उपयोग करके सूचीबद्ध किया जा सकता है।

@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.annotxt.internConature.nic.in" internalCachingMetadataReaderFactory "," org.springframework.boot.autoconfigure.condition.BeanTypeRegistry "," org.springframework.context.annotation.ConfigurationClassPostProcessor.importReg=hi "संपत्ति स्रोतों", "संपत्ति स्रोत" , "preserveErrorControllerTargetClassPostProcessor "," org.springframework.context.annotation.internalAutowiredAnnotationProcessor "," org.singingframework.context.annotation.internalRequiredAnnotmentor "" "org.sing" "" "।" ConfigurationPropertiesBindingPostProcessor "," org.springframework.scheduling.annotation.ProxyAsyncConfiguration "," org.springframework.context ".annotation.internalAsyncAnnotationProcessor", "MethodValidationPostProcessor", "methodValidationPostProcessor", "एम्बेडेड", "एंबेड:"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.ttpEncodingProperties "," org.springframework.boot.autoconfigure.web.HttpEncodingAutoConfiguration "," localeCharsetMappingsCustomizer ","। "", "।" "।" डुप्लीकेटसर्वरप्रोटेक्टीस डिटैक्टर "," स्प्रिंग.स्रोइट्स-ऑर्ग। एसप्रिंगफ्रेमवर्क.बूट।autoconfigure.web.ResourceProperties "," org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration $ DefaultErrorViewResolverConfiguration "," conventionErrorViewResolver "," org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration "," errorPageCustomizer "," ServletContext "" referenceParameters "," referenceAttributes "," spring.mvc-org.springframework.boot.autoconfigure.web.WebMvcProperties "," spring.http.multultart-org.springframework.boot.autoconfigure.web.Multipartproperties "। boot।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", "रिपोर्टर", "रिपोर्ट-गेनर," बूट।autoconfigure.AutoConfigurationPackages "," org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration "," org.pringframework.boot.autoconfigure.jackson.JacksonAonfigou.pigfigp.ac.in/free.php " जैक्सनप्रोपरेट्स "," standardJacksonObjectMapperBuilderCustomizer "," org.springframework.boot.autoconfigure.jackson.JacksonAutoConfigth $। boot.autoconfigure.jackson।JacksonAutoConfiguration $ JacksonObjectMapperConfiguration "," jacksonObjectMapper "," org। , "org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration", "defaultValidator", "org.springframework.boot.automfigure.web.ErrorMvcAutoConfiguration=run-run=run=run=free.vr.fr.free.php" , "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।requestMappingHandlerAdapter "," mvcResourceUrlProvider "," requestMappingHandlerMapping "," mvcPathMatcher "," mvcUrlPathHelper "," viewControllerHandlerMapping "," beanNameHandlerMapping "," beanNameHandlerMapping "," resourceHandlerMapping "," ResourceHandlerMapping "," ResourceHandlerMapping "," ResourceHandlerMapping "," ResourceHandlerMapping "," ResourceHandlerMapping "," ResourceHandlerMapping "," ResourceHandlerMapping "," ResourceHandlerMapping "," ResourceHandlerMapping "," ResourceHandlerMapping "," ResourceHandlerMapping "," ResourceHandlerMapping "," ResourceHandlerMapping "," ResourceHandlerMapping "," ResourceMandler "में" WWENameHandlerMapping "," ResourceHandlerMapping "में आपका स्वागत है। ।viewResolver "," welcomePageHandlerMapping "," org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration "," objectNamingStrassyy "," mbeanServer "," mbeanExporter "," org.spritpring/spring/spring=spring_pring "। , "org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration", "org.springframework.boot.autoconfigure.web.JacksonHttpMessageConvertersConfiguration", "वसंत," वसंत, "वसंत," Springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration "," multipartResolver "," org।Springframework.boot.autoconfigure.web.ebClientAutoConfiguration $ RestTemplateConfiguration "," restTemplateBuilder "," org.springframework.boot.autoconfigure.web.WebClientAutoCiguration "," वसंत, "#############"> 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 "," alternLiveReloadServer "," org.springframework.boot.devtools.autoconfigure.ocalDevToolsAutoConfiguration "," lifecycleProcessor "]


6

आप कॉल करने का प्रयास कर सकते हैं

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

या के लिए डीबग लॉगिंग चालू करें org.springframework। (स्प्रिंग बूट में, जो एक पैरामीटर का उपयोग कर रहा है --logging.level.org.springframework=DEBUG)


ListableBeanFactoryएक इंटरफ़ेस है। किसी को उस इंटरफ़ेस को फैलाने के लिए क्लास का एक उदाहरण कहां मिलेगा getBeansOfTypeया इंटरफ़ेस में किसी अन्य तरीके को निष्पादित करने के लिए ? मैं देखता हूं कि ApplicationContextइसका विस्तार होता है, लेकिन आपका उदाहरण यह नहीं दिखाता कि उनमें से एक को कैसे प्राप्त किया जाए।
एरिक

आप बस एक फ़ील्ड जोड़ सकते हैं @Autowired ListableBeanFactory listableBeanFactoryऔर आपको एक मिलेगा (कार्यान्वयन प्रकार कोई फर्क नहीं पड़ता)
आर्टब्रिस्टल

1

spring-boot-starter-actuatorआप का उपयोग करके आसानी से सभी बीन का उपयोग कर सकते हैं।

यहाँ सेटअप प्रक्रिया है:

  1. ढाल में निर्भरता जोड़ें :

बेले को ग्रेडल फ़ाइल में जोड़ें:

compile("org.springframework.boot:spring-boot-starter-actuator")
  1. Application.properties पर सुरक्षा सक्षम करें :

management.security.enabled=falseअपने application.property फ़ाइल में जोड़ें

  1. कॉल / सेम ​​एंडपॉइंट :

    उसके बाद सेटअप वसंत कुछ मैट्रिक्स से संबंधित समापन बिंदुओं को सक्षम करेगा। इसके समापन बिंदु में से एक / सेम ​​है इस समापन बिंदु को कॉल करने के बाद यह एक जसन फ़ाइल प्रदान करेगा जिसमें आपके सभी बीन शामिल हैं, जिसमें यह निर्भरता और गुंजाइश शामिल है।

यहाँ एक उदाहरण 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":[]}]

अधिक जानकारी के लिए bellow लिंक पर जाएं:

आशा है कि यह आपकी मदद करेगा। धन्यवाद :)


1
वसंत! = वसंत-बूट
हिमांशु भारद्वाज

हाँ, यह सच है भाई :)। यह समाधान स्प्रिंट बूट के लिए है।
मो। सजदुल करीम

1

वसंत आवेदन के संदर्भ से सभी बीन नामों को प्रिंट करने का एक और तरीका है:

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 ****************** 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.