Spring:@Autowired没有使用ApplicationContext

raw*_*awa 1 java spring spring-mvc

所以我只想打印已经加载的所有bean,我知道这个getBeanDefinitionNames()方法是很多人建议的.为此我明白你需要一个ApplicationContext我自动装配的,但是当我调用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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Application.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();
    }
}
Run Code Online (Sandbox Code Playgroud)

6to*_*ton 6

BeansPrinter不是一个春天豆.自动装配仅在父母是春豆的情况下才有效.

使用@Component或注释BeansPrinter@Service

@Service("beansPrinter")
public class BeansPrinter 
Run Code Online (Sandbox Code Playgroud)

在你的主要课程中你可以做类似的事情:

 ApplicationContext ctx = SpringApplication.run(Application.class, args);
Run Code Online (Sandbox Code Playgroud)

然后ctx.getBean("beansPrinter")得到你的豆