2015-08-08 4 views
1

Так что я просто хотел распечатать все загруженные бобы, и я понимаю, что метод getBeanDefinitionNames() - это то, что предлагают многие люди. Для этого я понимаю, вам нужен ApplicationContext, который я autowired, как показано ниже, но я получаю исключения нулевого указателя на объект, когда я звоню getBeanDefinitionNames() на нем:Spring: @ Не работает с ApplicationContext

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); 
     } 
    } 
} 

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(); 
    } 
} 
+0

'@ Component' отсутствует в вашем классе 'BeansPrinter' – EpicPandaForce

ответ

4

BeansPrinter не является фасолью. Autowiring будет работать только в том случае, если родительский элемент является родником.

аннотировать BeansPrinter с @Component или @Service

@Service("beansPrinter") 
public class BeansPrinter 

и в главном классе вы могли бы сделать что-то вроде:

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

, а затем ctx.getBean("beansPrinter"), чтобы получить боб

+0

Спасибо, что сделал трюк – rawa

Смежные вопросы