क्या स्टार्टअप पर लोड किए गए सभी स्प्रिंग बीन्स को प्रिंट करने का एक तरीका है? मैं स्प्रिंग 2.0 का उपयोग कर रहा हूं।
क्या स्टार्टअप पर लोड किए गए सभी स्प्रिंग बीन्स को प्रिंट करने का एक तरीका है? मैं स्प्रिंग 2.0 का उपयोग कर रहा हूं।
जवाबों:
हाँ, मिलें ApplicationContext
और कॉल करें.getBeanDefinitionNames()
आप इसके द्वारा संदर्भ प्राप्त कर सकते हैं:
ApplicationContextAware
@Inject
/ @Autowired
(2.5 के बाद) के साथ इसे इंजेक्ट करनाWebApplicationContextUtils.getRequiredWebApplicationContext(..)
संबंधित: आप बीन दर्ज करके प्रत्येक बीन के पंजीकरण का भी पता लगा सकते हैं BeanPostprocessor
। इसे प्रत्येक बीन के लिए अधिसूचित किया जाएगा।
public class PrintBeans {
@Autowired
ApplicationContext applicationContext;
public void printBeans() {
System.out.println(Arrays.asList(applicationContext.getBeanDefinitionNames()));
}
}
सभी बीन के नाम और उसकी कक्षाएं प्रिंट करें:
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";
}
}
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 "]
आप कॉल करने का प्रयास कर सकते हैं
org.springframework.beans.factory.ListableBeanFactory.getBeansOfType(Object.class)
या के लिए डीबग लॉगिंग चालू करें org.springframework
। (स्प्रिंग बूट में, जो एक पैरामीटर का उपयोग कर रहा है --logging.level.org.springframework=DEBUG
)
ListableBeanFactory
एक इंटरफ़ेस है। किसी को उस इंटरफ़ेस को फैलाने के लिए क्लास का एक उदाहरण कहां मिलेगा getBeansOfType
या इंटरफ़ेस में किसी अन्य तरीके को निष्पादित करने के लिए ? मैं देखता हूं कि ApplicationContext
इसका विस्तार होता है, लेकिन आपका उदाहरण यह नहीं दिखाता कि उनमें से एक को कैसे प्राप्त किया जाए।
@Autowired ListableBeanFactory listableBeanFactory
और आपको एक मिलेगा (कार्यान्वयन प्रकार कोई फर्क नहीं पड़ता)
spring-boot-starter-actuator
आप का उपयोग करके आसानी से सभी बीन का उपयोग कर सकते हैं।
यहाँ सेटअप प्रक्रिया है:
बेले को ग्रेडल फ़ाइल में जोड़ें:
compile("org.springframework.boot:spring-boot-starter-actuator")
management.security.enabled=false
अपने application.property फ़ाइल में जोड़ें
कॉल / सेम एंडपॉइंट :
उसके बाद सेटअप वसंत कुछ मैट्रिक्स से संबंधित समापन बिंदुओं को सक्षम करेगा। इसके समापन बिंदु में से एक / सेम है इस समापन बिंदु को कॉल करने के बाद यह एक जसन फ़ाइल प्रदान करेगा जिसमें आपके सभी बीन शामिल हैं, जिसमें यह निर्भरता और गुंजाइश शामिल है।
यहाँ एक उदाहरण 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 लिंक पर जाएं:
आशा है कि यह आपकी मदद करेगा। धन्यवाद :)
वसंत आवेदन के संदर्भ से सभी बीन नामों को प्रिंट करने का एक और तरीका है:
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 ******************
ApplicationContextAware
इंटरफ़ेस को लागू करने का कारण यह है क्योंकि स्प्रिंग फ्रेमवर्क इसे एप्लिकेशन संदर्भ तक पहुंचने का मौका देता है। आपको इसे@Configuration
इच्छित एप्लिकेशन संदर्भ के लिए कक्षा में रखना चाहिए ।