ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
方法1: ApplicationContext から取得
もっとも単純な方法。ApplicationContext を注入して任意の Bean を取り出す:
@RestController
public class BeanDumpController {
@Autowired
private ApplicationContext ctx;
@GetMapping("/debug/beans")
public Map<String, Object> all() {
// 登録されている全 Bean 名
String[] names = ctx.getBeanDefinitionNames();
Arrays.sort(names);
Map<String, Object> 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<String, UserRepository> repos = ctx.getBeansOfType(UserRepository.class);
repos.forEach((name, bean) -> {
System.out.println(name + " = " + bean);
});
// 親クラスからの継承も含めて
String[] names = BeanFactoryUtils.beanNamesForTypeIncludingAncestors(
ctx, DataSource.class);
// アノテーション付き Bean
Map<String, Object> beans = ctx.getBeansWithAnnotation(Service.class);
方法3: Spring Boot Actuator の /beans
本番環境でも安全に Bean 一覧を見られる方法。spring-boot-starter-actuator を依存に追加:
<!-- pom.xml -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency># 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 で可視化:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
方法比較
| 方法 | 本番可 | 動的 | 手間 |
|---|---|---|---|
| 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アノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?