ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
方法1: ApplicationContext から取得
もっとも単純な方法。ApplicationContext を注入して任意の Bean を取り出す:
@RestController
public class BeanDumpController {
@Autowired
private ApplicationContext ctx;
@GetMapping("/debug/beans")
public Map all() {
// 登録されている全 Bean 名
String[] names = ctx.getBeanDefinitionNames();
Arrays.sort(names);
Map result = new LinkedHashMap<>();
for (String name : names) {
Object bean = ctx.getBean(name);
result.put(name, bean.getClass().getName());
}
return result;
}
@GetMapping("/debug/bean/{name}")
public Object byName(@PathVariable String name) {
Object bean = ctx.getBean(name);
return bean.toString(); // Lombok @ToString 推奨
}
}
方法2: 型で取得 (getBeansOfType)
// 特定インターフェースの実装を全部取得
Map repos = ctx.getBeansOfType(UserRepository.class);
repos.forEach((name, bean) -> {
System.out.println(name + " = " + bean);
});
// 親クラスからの継承も含めて
String[] names = BeanFactoryUtils.beanNamesForTypeIncludingAncestors(
ctx, DataSource.class);
// アノテーション付き Bean
Map beans = ctx.getBeansWithAnnotation(Service.class);
方法3: Spring Boot Actuator の /beans
本番環境でも安全に Bean 一覧を見られる方法。spring-boot-starter-actuator を依存に追加:
org.springframework.boot
spring-boot-starter-actuator
# application.properties
management.endpoints.web.exposure.include=beans,health,env,mappings
management.endpoint.beans.enabled=true
# セキュリティ: 内部 IP のみ許可することを忘れず
management.server.port=9000# curl で叩く
curl http://localhost:8080/actuator/beans | jq
# 出力例
{
"contexts": {
"application": {
"beans": {
"userService": {
"aliases": [],
"scope": "singleton",
"type": "com.example.UserServiceImpl",
"resource": "...",
"dependencies": ["userRepository", "passwordEncoder"]
}
}
}
}
}
方法4: @PostConstruct でフィールドをログ出力
起動直後に Bean の状態をログに出すパターン。設定値の確認に便利:
@Service
@Slf4j
public class MailService {
@Value("${spring.mail.host}")
private String host;
@Value("${spring.mail.port}")
private int port;
@Value("${spring.mail.username}")
private String username;
@PostConstruct
public void init() {
log.info("MailService 設定: host={}, port={}, user={}",
host, port, username);
// パスワードはログに出さない!
}
}
方法5: Jackson で JSON 化
Lombok の @ToString で出ない循環参照を避けつつフィールドを見たい場合:
@Autowired
private ObjectMapper objectMapper;
@GetMapping("/debug/bean-json/{name}")
public String dump(@PathVariable String name) throws Exception {
Object bean = ctx.getBean(name);
return objectMapper.writerWithDefaultPrettyPrinter()
.writeValueAsString(bean);
}
// 循環参照が出る場合
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
方法6: IDE デバッガ(最強)
IntelliJ IDEA / Eclipse / VS Code でブレークポイントを設定し、変数ウィンドウで Bean をインスペクト。プロキシ越しの場合は:
- IntelliJ: Evaluate Expression で
AopUtils.getTargetClass(bean)や((Advised) bean).getTargetSource().getTarget()を実行 - Lazy Loading: 遅延初期化 Bean は最初のアクセスまで未生成 →
ctx.getBean()でトリガー - CGLIB プロキシ: フィールドはターゲット側にある → 「View as: TargetSource」
方法7: DevTools の Live Reload
開発中なら spring-boot-devtools を入れると、コード変更で自動再起動 + Bean 一覧を VS Code Spring Boot Dashboard で可視化:
org.springframework.boot
spring-boot-devtools
runtime
true
方法比較
| 方法 | 本番可 | 動的 | 手間 |
|---|---|---|---|
| ApplicationContext#getBean | △ デバッグ用 endpoint で隠す | ○ | 中 |
| Actuator /beans | ◯ セキュリティ設定すれば | ○ | 低 |
| @PostConstruct ログ | ◯ | ×(起動時のみ) | 低 |
| Jackson JSON 化 | △ | ○ | 中 |
| IDE デバッガ | ×(リモートデバッグなら可) | ○ | 低 |
| DevTools Dashboard | × | ○ | 低 |
注意: 機密フィールドはマスクする
// パスワード / APIキー / トークンは Jackson で除外
public class DataSourceConfig {
private String url;
private String username;
@JsonIgnore // ← JSON 出力時に除外
private String password;
}
// Lombok @ToString でも除外
@ToString(exclude = "password")
public class User {
private String name;
private String password;
}
FAQ
Q: NoSuchBeanDefinitionException が出る
A: Bean 名のタイポ、もしくは @Component / @Service 付け忘れ。@ComponentScan のパッケージ範囲も確認。
Q: Actuator は本番で開けて大丈夫?
A: Spring Security でアクセス制限を必ずかけてください。management.server.port を別ポートにして内部 LAN のみ許可が定番。
Q: 循環依存で Bean 生成が失敗する
A: setter 注入 / @Lazy で回避。設計を見直すのが本筋。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?