java - Spring:@Autowired 不与 ApplicationContext 一起工作

标签 java spring spring-mvc

<分区>

所以我只是想打印所有已加载的 bean,我理解 getBeanDefinitionNames() 方法是很多人建议的。为此,我知道你需要一个 ApplicationContext ,我按如下方式 Autowiring 它,但是当我调用 getBeanDefinitionNames() 时,我在对象上遇到空指针异常:

package hello;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;

public class BeansPrinter 
{
    @Autowired
    private ApplicationContext appContext;

    public void printBeans()
    {
        System.out.println("Number of beans:");
        System.out.println(appContext.getBeanDefinitionCount());

        String[] names = appContext.getBeanDefinitionNames();
        for(String name : names)
        {
            System.out.println("-----------------");
            System.out.println(name);
        }
    }
}

应用程序.java

package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);

        BeansPrinter b = new BeansPrinter();
        b.printBeans();
    }
}

最佳答案

BeansPrinter 不是 spring bean。 Autowiring 只有在父级是 spring bean 时才有效。

使用 @Component@Service 注释您的 BeansPrinter>

@Service("beansPrinter")
public class BeansPrinter 

在你的主类中你可以做这样的事情:

 ApplicationContext ctx = SpringApplication.run(Application.class, args);

然后 ctx.getBean("beansPrinter") 获取你的 bean

关于java - Spring:@Autowired 不与 ApplicationContext 一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31899272/

相关文章:

java - Neo4j : Passing Relationship as a query parameter

java - 正则表达式匹配,当目标字符串中存在向后移动的模式时?

java - 小版本更新后 Spring Security 异常 : "Please ensure Spring Security & Spring MVC are configured in a shared ApplicationContext"

spring-mvc - Spring 3、Hibernate 4 AutoWired sessionFactory 与通用 DAO

java - 将 Spring MVC 应用程序从 JSP 迁移到 AngularJS

java - 使用 api XSSF 时出现 NoClassDefFoundError

java - allowUnsafeRenegotiation,但仍然是 CertificateException

java - HQL IF 子句不适用于 IS NOT NULL

java - 使用 spring batch 并行执行作业

java - 带预身份验证的 Spring Security 自定义异常处理程序