2016-09-25 9 views
1

SpringApplicationを起動するときに私が書いたすべてのBeanを登録しようとしています。SpringApplication.runでロードされたすべてのBeanを一覧表示します。

を取得するすべて表示された豆が実行されます。このコードはそれを行います。

String[] beanNames = appContext.getBeanDefinitionNames(); 

Arrays.sort(beanNames); 
for (String beanName : beanNames) { 
     System.out.println(beanName); 
} 

私は私のものを探すために、基本的なフィルタを使用してみました。

String[] beanNames = appContext.getBeanDefinitionNames(); 

Arrays.sort(beanNames); 
for (String beanName : beanNames) { 
    if (beanName.matches("(.*)Controller")) 
     System.out.println(beanName); 
} 

しかし、クラスがロードされるとき、それは本当にクラスの名前を正確にロードされていないBean名であるため、それが動作しません。だから、私がと書いたのなら、my.personal.package.structure.MyControllerそれはおそらくmyControllerと表示されます。パッケージ構造情報が失われてこのテクニックがレンダリングされますが、あまり効果的ではありません。

他の誰かが働いたことがありますか?私はこれがデバッグ用の開発者にとって非常に便利だと思います。

答えて

3

ConfigurableApplicationContextを使用すると、すべてのBeanタイプを取得できます。たとえば:すべてのBeanを表示する

@Autowired 
ConfigurableApplicationContext context; 
..... 
ConfigurableListableBeanFactory beansFactory = context.getBeanFactory(); 
String[] beansNames = beansFactory.getBeanDefinitionNames(); 
Set<String> beansType = new HashSet<>(); 

for(String beanName : beansNames){ 
    if (beanName.matches("(.*)Controller")){ 
     beansType.add(beansFactory.getType(beanName).toString()); 
    } 
} 

他のより容易なオプションは、あなたがSpring boot actuatorを使用することができ、ばねウェブを使用している場合は です。 をpom.xmlに追加し、/beanエンドポイントに移動してすべてのBeanを表示すると、Beanとクラスの名前が表示されます。

+0

** spring-boot-starter-actuator **を追加し、** localhost:8080/beans **を追加しました。私はロードされたすべての豆の長いリストを持っていた、と思います。しかし、私が追加した豆だけを列挙する方法を探していました。だから、これは私が探していたものではありません。 –

+0

私の2番目の選択肢は見たことがありますか?あなたはそれに一致条件を追加する必要があります.... – Pau

+0

私は2番目のオプションを試しています。しかし、今まで、運はありません。 –

関連する問題