มีวิธีพิมพ์ถั่วสปริงทั้งหมดที่โหลดเมื่อเริ่มต้นหรือไม่ฉันใช้ Spring 2.0
มีวิธีพิมพ์ถั่วสปริงทั้งหมดที่โหลดเมื่อเริ่มต้นหรือไม่ฉันใช้ Spring 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()));
}
}
พิมพ์ชื่อ bean และคลาสทั้งหมด:
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";
}
}
ด้วย Spring Boot และสตาร์ทเตอร์แอคชูเอเตอร์
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
คุณสามารถตรวจสอบจุดสิ้นสุด /beans
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
ในขณะที่คุณสามารถมองเห็นในการส่งออก, สภาพแวดล้อม, systemProperties, systemEnvironmentถั่วจะไม่ได้รับการแสดงโดยใช้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", "environment", "systemProperties", "systemEnvironment", "org.springframework.context.annotation.internalConfigurationAnnotationProcessor", "org.springframework.bootoconigure internalCachingMetadataReaderFactory "," org.springframework.boot.autoconfigure.conditionBeanTypeRegistry "," org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry "," propertySourcesSourcesPlaceholderConfigurer "," org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry "," propertySourcesSourcesPlaceholderConfigurer , "PreserveErrorControllerTargetClassPostProcessor "," org.springframework.context.annotation.internalAutowiredAnnotationProcessor "," org.springframework.context.annotation.internalRequiredAnnotationProcessor "," org.springframework.context.annotation.inextring.extommonnotationProcessor " ConfigurationPropertiesBindingPostProcessor "," org.springframework.scheduling.annotation.ProxyAsyncConfiguration "," org.springframework.context.annotation.internalAsyncAnnotationProcessor "," methodValidationPostProcessor "," embedServletContainerCustomizerRoanPost "ข้อความapplicationEventMulticaster "," org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration $ EmbeddedTomcat "," tomcatEmbeddedServletContainerFactory "," org.springframework.boot.autoconfigure.websocketWebSocketAutoConfigure.websocketWebSocketAutoConfiguration " org.springframework.boot.autoconfigure.web.HttpEncodingProperties "," org.springframework.boot.autoconfigure.web.HttpEncodingAutoConfiguration "," localeCharsetMappingsCustomizer "," org.springframework.boot.autoconfigure.web.SutoConfiguration "," localeCharsetMappingsCustomizer "," org.springframework.boot.autoconfigure.web.SutoConfiguration duplicateServerPropertiesDetector "," spring.resources-org.springframework.bootautoconfigure.web.ResourceProperties "," org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration $ DefaultErrorViewResolverConfiguration "," conventionErrorViewResolver "," org.springframework.boot.autoconfigure.web.ErrorMacion "," conventionErrorViewResolver "," org.springframework.boot.autoconfigure.web.Error 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.webDispatcherServletAutoConfiguration "DispatcherServletRegistrationConfiguration", "org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration $ DispatcherServletConfiguration", "dispatcherServlet", "dispatcherServletRegistration.boot.autoconfigure.web.DispatcherServletAutoConfiguration $ DispatcherServletConfiguration", "dispatcherServlet", "dispatcherServletRegistration. , "httpPutFormContentFilter", "characterEncodingFilter", "org.springframework.context.event.internalEventListenerProcessor", "org.springframework.context.event.internalEventListenerFactory", "reportGeneratorApplication", "exportController", "exportSerring. บูตautoconfigure.AutoConfigurationPackages "," org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration "," org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration $ Jackson2ObjectMapperBuilderCustomizerConfiguration "," spring.jackson.configuration JacksonProperties "," standardJacksonObjectMapperBuilderCustomizer "," org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration $ JacksonObjectMapperBuilderConfiguration "," org.springframework.boot.autoconfigure.jackson.JompentCildring boot.autoconfigure.jacksonJacksonAutoConfiguration $ JacksonObjectMapperConfiguration "," jacksonObjectMapper "," org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration "," org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfring. , "org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration", "defaultValidator", "org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration $ WhitelabelErrorViewConfiguration", "error", "beanNameViewResolver" error , "org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration $ EnableWebMvcConfiguration "," org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration $ WebMvcAutoConfigurationAdapter "," mvcContentNegotiationManager "," org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration $ WebMvcAutoConfigurationAdapter "," mvcContentNegotiationManager "," org.springframework.boot.autvert boot.autoconfigure.web.JacksonHttpMessageConvertersConfiguration $ MappingJackson2HttpMessageConverterConfiguration "," mappingJackson2HttpMessageConverter "," org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration "," messageConfiguration "," messageConfiguration "," messageConfiguration "," messageConfiguration "," messageConfiguration ","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 "," org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration "," objectNamingStrategy "," mbeanServer "," mbeanExporter "," org.springframework.boot.autoconfigure.adminAdmin.SpringApplication " , "org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration", "org.springframework.boot.autoconfigure.web.JacksonHttpMessageConvertersConfiguration", "spring.info-org.springframework.boot.autoconfigure.info.ProjectInfo. springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration "," multipartResolver "," org.springframework.boot.autoconfigure.web.WebClientAutoConfiguration $ RestTemplateConfiguration "," restTemplateBuilder "," org.springframework.boot.autoconfigure.web.WebClientAutoConfiguration "," spring.devtools-org.springframework.boot.vigure org.springframework.boot.devtools.autoconfigure.LocalDevToolsAutoConfiguration $ RestartConfiguration " "fileSystemWatcherFactory", "classPathRestartStrategy", "classPathFileSystemWatcher", "hateoasObjenesisCacheDisabler", "org.springframework.boot.devtools.autoconfigure.LocalDevToolsAutoConfiguration $ LiveReloadConfiguration $ LiveReloadServerConfiguration"," org.springframework.boot.devtools.autoconfigureLocalDevToolsAutoConfiguration $ LiveReloadConfiguration "," optionalLiveReloadServer "," org.springframework.boot.devtools.autoconfigure.LocalDevToolsAutoConfiguration "," 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
คุณสามารถเข้าถึงถั่วทั้งหมดได้อย่างง่ายดาย
ขั้นตอนการตั้งค่ามีดังนี้
เพิ่มการร้องลงในไฟล์ gradle:
compile("org.springframework.boot:spring-boot-starter-actuator")
เพิ่มmanagement.security.enabled=false
ลงในไฟล์ application.property ของคุณ
โทร / ถั่วปลายทาง :
หลังจากนั้นสปริงการตั้งค่าจะเปิดใช้งานจุดสิ้นสุดที่เกี่ยวข้องกับเมตริกบางส่วน หนึ่งในจุดสิ้นสุดคือ/ beans หลังจากเรียกจุดสิ้นสุดนี้แล้วมันจะให้ไฟล์ json ที่มี bean ทั้งหมดของคุณรวมถึงการพึ่งพาและขอบเขต
นี่คือตัวอย่างไฟล์ 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":[]}]
สำหรับข้อมูลเพิ่มเติมโปรดเยี่ยมชมลิงค์ร้อง:
หวังว่านี่จะช่วยคุณได้ ขอบคุณ :)
นี่เป็นอีกวิธีหนึ่งในการพิมพ์ชื่อ bean ทั้งหมดจากบริบทแอปพลิเคชัน spring
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
อินเทอร์เฟซเนื่องจาก Spring framework เปิดโอกาสให้เข้าถึงบริบทของแอปพลิเคชัน คุณควรวางไว้ใน@Configuration
ชั้นเรียนสำหรับบริบทแอปพลิเคชันที่ต้องการ