@Component系アノテーションでBeanを定義する
@Component("dataAccessor")
public class DataAccessorImpl implements DataAccessor {}
@Service
public class BusinessServiceImpl implements BusinessService {}
設定ファイルでは、コンポーネントスキャンによりパッケージ内のBeanを自動検出します:
<context:component-scan base-package="com.example" />
レイヤーごとの専用アノテーションも利用可能です:
@Controller:プレゼンテーション層@Service:ビジネスロジック層@Repository:データアクセス層
XML不要:Javaクラスによる完全アノテーション設定
@Configuration
@ComponentScan({"com.example.service", "com.example.repo"})
public class AppConfig {}
コンテナ起動時は、XMLではなくJava設定クラスを指定します:
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
Beanのスコープとライフサイクル制御
@Repository
@Scope("prototype")
public class DataAccessorImpl implements DataAccessor {
@PostConstruct
public void setup() {
System.out.println("Bean初期化完了");
}
@PreDestroy
public void cleanup() {
System.out.println("Bean破棄開始");
}
}
自動依存注入の実装
@Service
public class BusinessServiceImpl implements BusinessService {
@Autowired
private DataAccessor accessor;
@Autowired
@Qualifier("secondaryAccessor")
private DataAccessor backupAccessor;
@Value("${app.timeout:3000}")
private int timeout;
}
外部プロパティファイルの読み込みには@PropertySourceを使用:
@Configuration
@PropertySource("classpath:app-config.properties")
public class AppConfig {}
サードパーティ製Beanの統合
public class DataSourceConfig {
@Value("${db.driver}")
private String driverClass;
@Bean
public DataSource appDataSource(TransactionLogger logger) {
HikariConfig config = new HikariConfig();
config.setDriverClassName(driverClass);
config.setJdbcUrl("jdbc:h2:mem:test");
System.out.println("トランザクションロガー注入: " + logger);
return new HikariDataSource(config);
}
}
設定クラスへの統合は@Importで明示的に行います:
@Configuration
@Import(DataSourceConfig.class)
public class AppConfig {}