{"id":268,"date":"2024-03-07T20:39:05","date_gmt":"2024-03-07T19:39:05","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=268"},"modified":"2024-03-08T21:13:23","modified_gmt":"2024-03-08T20:13:23","slug":"die-conditional-annotation-in-spring-boot","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=268","title":{"rendered":"Die @Conditional-Annotation in Spring Boot"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Einleitung:<\/h2>\n\n\n\n<p>Spring Boot hat sich als ein beliebtes Framework f\u00fcr die Entwicklung von Java-Anwendungen etabliert, das Entwicklern die M\u00f6glichkeit bietet, schnell und effizient hochperformante Anwendungen zu erstellen. Eine der vielen leistungsstarken Funktionen von Spring Boot ist die @Conditional-Annotation, die es Entwicklern erm\u00f6glicht, die Konfiguration ihrer Anwendungen basierend auf bestimmten Bedingungen anzupassen. In diesem Artikel werden wir uns ausf\u00fchrlich mit der @Conditional-Annotation besch\u00e4ftigen, ihre Verwendungsf\u00e4lle erkunden und sehen, wie sie die Flexibilit\u00e4t und Konfigurierbarkeit von Spring Boot-Anwendungen verbessern kann.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hintergrund:<\/h2>\n\n\n\n<p>Spring Boot verwendet den Spring-Framework-Container, um die Komponenten einer Anwendung zu verwalten und zu konfigurieren. Die @Conditional-Annotation wurde eingef\u00fchrt, um die bedingte Konfiguration zu erm\u00f6glichen, was bedeutet, dass bestimmte Bean-Konfigurationen nur aktiviert werden, wenn bestimmte Bedingungen erf\u00fcllt sind. Dies erm\u00f6glicht es Entwicklern, die Anwendungskonfiguration dynamisch anzupassen, basierend auf Umgebungsvariablen, Systemeigenschaften oder anderen Faktoren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Verwendung der @Conditional-Annotation:<\/h2>\n\n\n\n<p>Die @Conditional-Annotation kann auf verschiedene Arten verwendet werden, um die Aktivierung von Beans oder Konfigurationen zu steuern. Hier sind einige der h\u00e4ufigsten Verwendungsf\u00e4lle:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Bedingung basierend auf Systemeigenschaften:<\/h3>\n\n\n\n<p>Sie k\u00f6nnen die @Conditional-Annotation verwenden, um die Konfiguration einer Bean basierend auf bestimmten Systemeigenschaften zu steuern. Zum Beispiel k\u00f6nnen Sie eine Bean nur aktivieren, wenn eine bestimmte Systemeigenschaft vorhanden ist:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">@Configuration\n@Conditional(SystemPropertyCondition.class)\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">MyConfig<\/span> <\/span>{\n    <span class=\"hljs-comment\">\/\/ Bean-Konfiguration hier<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Und die <code>SystemPropertyCondition<\/code>-Klasse k\u00f6nnte so aussehen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">SystemPropertyCondition<\/span> <span class=\"hljs-keyword\">implements<\/span> <span class=\"hljs-title\">Condition<\/span> <\/span>{\n    @Override\n    <span class=\"hljs-keyword\">public<\/span> boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {\n        <span class=\"hljs-keyword\">return<\/span> System.getProperty(<span class=\"hljs-string\">\"my.property\"<\/span>) != <span class=\"hljs-keyword\">null<\/span>;\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">2. Bedingung basierend auf Klassen im Klassenpfad:<\/h3>\n\n\n\n<p>Sie k\u00f6nnen auch die @Conditional-Annotation verwenden, um eine Bean nur zu aktivieren, wenn bestimmte Klassen im Klassenpfad vorhanden sind:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">@Configuration\n@ConditionalOnClass(name = <span class=\"hljs-string\">\"com.example.SomeClass\"<\/span>)\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">MyConfig<\/span> <\/span>{\n    <span class=\"hljs-comment\">\/\/ Bean-Konfiguration hier<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel wird die Bean-Konfiguration nur aktiviert, wenn die Klasse &#8222;com.example.SomeClass&#8220; im Klassenpfad gefunden wird.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Bedingung basierend auf Bean-Existenz:<\/h3>\n\n\n\n<p>Eine weitere n\u00fctzliche Anwendung ist die bedingte Konfiguration basierend auf der Existenz bestimmter Beans:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">@Configuration\n@ConditionalOnMissingBean(name = <span class=\"hljs-string\">\"myBean\"<\/span>)\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">MyConfig<\/span> <\/span>{\n    <span class=\"hljs-comment\">\/\/ Bean-Konfiguration hier<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Fall wird die Bean-Konfiguration nur aktiviert, wenn keine Bean mit dem Namen &#8222;myBean&#8220; im Kontext vorhanden ist.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Eigene bedingte Annotierungen erstellen:<\/h2>\n\n\n\n<p>Die @Conditional-Annotation bietet Entwicklern die M\u00f6glichkeit, benutzerdefinierte bedingte Annotierungen zu erstellen, um spezifischere Bedingungen zu definieren. Dies kann durch die Implementierung des <code>Condition<\/code>-Interfaces erreicht werden. Hier ist ein einfaches Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">CustomCondition<\/span> <span class=\"hljs-keyword\">implements<\/span> <span class=\"hljs-title\">Condition<\/span> <\/span>{\n    @Override\n    <span class=\"hljs-keyword\">public<\/span> boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {\n        <span class=\"hljs-comment\">\/\/ Benutzerdefinierte Bedingung \u00fcberpr\u00fcfen<\/span>\n        <span class=\"hljs-comment\">\/\/ R\u00fcckgabewert bestimmt, ob die Konfiguration aktiviert wird oder nicht<\/span>\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Und dann k\u00f6nnen Sie Ihre benutzerdefinierte bedingte Anmerkung in Ihrer Konfiguration verwenden:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">@Configuration\n@CustomCondition\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">MyConfig<\/span> <\/span>{\n    <span class=\"hljs-comment\">\/\/ Bean-Konfiguration hier<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Fazit:<\/h2>\n\n\n\n<p>Die @Conditional-Annotation ist eine leistungsstarke Funktion in Spring Boot, die Entwicklern erlaubt, die Konfiguration ihrer Anwendungen dynamisch anzupassen. Durch die M\u00f6glichkeit, Bedingungen basierend auf Systemeigenschaften, Klassen im Klassenpfad oder sogar der Existenz von Beans zu definieren, bietet diese Annotation eine hohe Flexibilit\u00e4t bei der Konfiguration von Spring Boot-Anwendungen. Durch die Erstellung eigener bedingter Anmerkungen k\u00f6nnen Entwickler spezifische Bedingungen definieren und die Konfiguration ihrer Anwendungen noch weiter anpassen. Insgesamt tr\u00e4gt die @Conditional-Annotation dazu bei, Spring Boot-Anwendungen modularer und flexibler zu gestalten, was besonders wichtig ist, wenn Anwendungen in verschiedenen Umgebungen oder f\u00fcr unterschiedliche Anwendungsf\u00e4lle bereitgestellt werden sollen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Einleitung: Spring Boot hat sich als ein beliebtes Framework f\u00fcr die Entwicklung von Java-Anwendungen etabliert, das Entwicklern die M\u00f6glichkeit bietet, schnell und effizient hochperformante Anwendungen zu erstellen. Eine der vielen leistungsstarken Funktionen von Spring Boot ist die @Conditional-Annotation, die es Entwicklern erm\u00f6glicht, die Konfiguration ihrer Anwendungen basierend auf bestimmten Bedingungen anzupassen. In diesem Artikel werden [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-268","post","type-post","status-publish","format-standard","hentry","category-spring"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/268","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=268"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/268\/revisions"}],"predecessor-version":[{"id":269,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/268\/revisions\/269"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=268"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=268"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=268"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}