我正在调试我的Java Spring服务,我得到了一个@Autowired变量为空,而它不应该是空的。由于我已经将服务的类声明为@Service,因此我想再次检查我的bean是否被Spring扫描过,并包含在Application Context中。因此,我希望能够在Eclipse中观察到Application Context的内容。这怎么可能呢?
svgewumm1#
你可以使用log4j.jar来输出所有的警告,调试,信息一旦你启动你的服务器。按照下面的链接http://www.tutorialspoint.com/spring/logging_with_log4j.htm。我有一个工作的例子在我的另一个笔记本电脑,可以张贴的代码。让我知道如果你需要它
qyyhg6bp2#
将ApplicationContext注入到可以调试和调用#getBeanDefinitionNames bean中
ApplicationContext
#getBeanDefinitionNames
mrwjdhj33#
我不确定这是否是最好的方法,但如果您只想检查依赖项是否正确注入,则无需添加任何额外的框架,您可以首先从字段中删除@Autowired注解。现在创建一个参数化的构造函数,并使用@Autowired注解该构造函数。Spring将尝试通过该构造函数注入所有的bean。http://www.tutorialspoint.com/spring/spring_autowired_annotation.htm现在,您可以在构造函数中放置断点,以检查注入了什么值。希望这对你有帮助。
mzillmmw4#
有一种变通方法可以在不更改源代码的情况下在调试器中获取WebApplicationContext。RequestContextUtils#findWebApplicationContext方法将帮助我们解决这个问题。您需要将当前请求传递给它,也可以使用static方法获取该请求:
WebApplicationContext
RequestContextUtils#findWebApplicationContext
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest()
通过组合这些调用,可以在调试器中得Web应用程序中得任何位置获取上下文,并调用其任何方法:
RequestContextUtils .findWebApplicationContext(((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest()) .getBeanDefinitionNames();
稍微漂亮一点的版本:
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); WebApplicationContext webApplicationContext = RequestContextUtils.findWebApplicationContext(request); webApplicationContext.getBeanDefinitionNames();
4条答案
按热度按时间svgewumm1#
你可以使用log4j.jar来输出所有的警告,调试,信息一旦你启动你的服务器。按照下面的链接http://www.tutorialspoint.com/spring/logging_with_log4j.htm。我有一个工作的例子在我的另一个笔记本电脑,可以张贴的代码。让我知道如果你需要它
qyyhg6bp2#
将
ApplicationContext
注入到可以调试和调用#getBeanDefinitionNames
bean中mrwjdhj33#
我不确定这是否是最好的方法,但如果您只想检查依赖项是否正确注入,则无需添加任何额外的框架,您可以首先从字段中删除@Autowired注解。
现在创建一个参数化的构造函数,并使用@Autowired注解该构造函数。Spring将尝试通过该构造函数注入所有的bean。
http://www.tutorialspoint.com/spring/spring_autowired_annotation.htm
现在,您可以在构造函数中放置断点,以检查注入了什么值。
希望这对你有帮助。
mzillmmw4#
有一种变通方法可以在不更改源代码的情况下在调试器中获取
WebApplicationContext
。RequestContextUtils#findWebApplicationContext
方法将帮助我们解决这个问题。您需要将当前请求传递给它,也可以使用static方法获取该请求:
通过组合这些调用,可以在调试器中得Web应用程序中得任何位置获取上下文,并调用其任何方法:
稍微漂亮一点的版本: