In-Depth Compréhension de l'annotation @configuration dans le cadre de printemps
Les annotations dans le cadre de printemps sont utilisées pour marquer une classe définie par une classe. Dans la configuration basée sur Java de Spring, cette annotation est très importante. @Configuration
Annotations, Spring le traitera comme une classe de configuration et le traite pour générer et gérer le bean de printemps. Ce type contient généralement une ou plusieurs annotations @Configuration
. @Bean
Cette classe devient la source de la définition du bean et Spring utilisera ces définitions pour définir le contexte de l'application.
Spring générera la sous-classe basée sur CGLIB (proxy) pour s'assurer que la méthode renvoie la même instance unique d'exemple par défaut. Ce comportement est appelé mode complet
. Si vous n'effectuez pas d'agent, appelez la méthode plusieurs fois peut créer plusieurs instances. @Bean
@Bean
intégré aux composants
annotations), la classe des annotations peut être explicitement définie par, et le ressort est autorisé à numériser automatiquement et à enregistrer d'autres grains.
@ComponentScan
Autoriser l'injection @SpringBootApplication
@Configuration
Exemple de base
@Configuration
<code class="language-java">import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { @Bean public MyService myService() { return new MyServiceImpl(); } @Bean public MyController myController() { return new MyController(myService()); } }</code>
myController()
myService()
Selon les fonctions (telles que DataConfig, ServiceConfig et WebConfig), la configuration est divisée en plusieurs classes. Cela améliore la lisibilité et la maintenance. MyService
3. Utilisez @componentscan pour scanner
<code class="language-java">@Configuration public class DataConfig { @Bean public DataSource dataSource() { // 配置并返回数据源 } } @Configuration public class ServiceConfig { @Bean public UserService userService() { return new UserServiceImpl(); } }</code>
. @Value
@ConfigurationProperties
<code class="language-java">@Configuration public class AppConfig { @Value("${app.name}") private String appName; @Bean public AppService appService() { return new AppService(appName); } }</code>
<code class="language-java">import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { @Bean public MyService myService() { return new MyServiceImpl(); } @Bean public MyController myController() { return new MyController(myService()); } }</code>
. @ConfigurationProperties
@Value
<code class="language-java">@Configuration public class DataConfig { @Bean public DataSource dataSource() { // 配置并返回数据源 } } @Configuration public class ServiceConfig { @Bean public UserService userService() { return new UserServiceImpl(); } }</code>
@Configuration
new
Mauvaise écriture: Dépendance du cyclone
Soyez prudent lors de la définition du haricot mutuellement dépendant, car il entraînera une dépendance de la circulation.<code class="language-java">@Configuration public class AppConfig { @Value("${app.name}") private String appName; @Bean public AppService appService() { return new AppService(appName); } }</code>
La méthode @Bean Évitez la méthode d'annotation @Lazy
de ré-chargement, car elle peut provoquer des résultats inattendus.
Restrictions d'agent Le mécanisme de l'agence de @Bean
n'est pas efficace lorsque la classe n'est pas définitive. Évitez de marquer la classe de configuration à finir.
Utilisez soigneusement @Component Évitez de mélanger et @Configuration
dans la même classe. Cela peut conduire à des comportements inattendus, car la méthode de traitement
en utilisant des exemples avancés d'injects @Component
@Configuration
@Configuration
<code class="language-java">@Configuration @ComponentScan(basePackages = "com.example.myapp") public class AppConfig { // 必要时使用显式Bean }</code>
DataSource
JdbcTemplate
meilleure pratique @Configuration
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!