UPDATE: Ich habe einen anderen Ansatz für mein Problem verwendet.Frühling - Erstelle Bean basierend auf Annotation-Feld
Side-Frage: Ich würde gerne wissen, wie Frühling macht es mit dem Ausschluß in SpringBootApplication
Die SpringBootApplication:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class))
public @interface SpringBootApplication {
Also, wenn der Kontext geladen wird, und die EnableAutoConfiguration ausgeführt wird , die Ausschlüsse sind verfügbar.
Das ist das gleiche was ich will.
Bei Bean-Creation mag ich wissen, ob eine Annotation einige Felder (zB boolean) hat
Alte Frage:
ich eine Anmerkung habe:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(TaskSpringContext.class)
public @interface TaskTest
{
Class<? extends DatabaseService> db() default DatabaseService.class;
}
Diese Annotation wird verwendet bei:
@TaskTest(db = DatabaseServiceExtended.class)
@SpringBootApplication()
public class TaskServer
{
public static void main(String[] args)
{
final ApplicationContext ctx = SpringApplication.run(TaskServer.class, args);
}
}
Nun, bei TaskSpringContext.class mag ich eine Bohne erstellen auf der Grundlage des db-Gebiet der TaskTest-Annotation:
@Bean(name = "databaseService")
public DatabaseService databaseService()
{
return ??
Here i want to return the DatabaseServiceExtended
}
Jeder weiß, wie es zu tun?
Es gibt keine Garantie, dass nur eine @SpringBootApplication auf Ihrem Klassenpfad vorhanden ist ... Was also möchten Sie? Der, wo Ihre Hauptmethode ist? Während es Möglichkeiten gibt, die Hauptklasse zu bekommen, ist keiner von ihnen ziemlich gut, wenn du mich fragst. Vielleicht möchten Sie vielleicht nach Alternativen suchen, weil ich ziemlich überzeugt bin, dass es einen besseren Weg gibt, das zu tun, was Sie tun wollen, basierend auf dem Anwendungsfall. –
Die SpringBootApplication Annotation hat ein Feld "exclude". Dort können Sie Klassen angeben. Diese Klassen müssen etwas gelesen werden. Es ist das gleiche was ich will. Ich möchte eine Bean mit einer Annotation erstellen und das Feld der Annotation soll helfen, die Bean zu erstellen. – Hesk
Es ist keine gute Übung, Ihre Fragen so zu bearbeiten, aber der Übersichtlichkeit halber ... Spring Annotation erstellt meistens nur Klassen/Beans. In diesem Fall sollte meine Antwort unten helfen, da '@ ComponentScan' (und seine ältere XML-Variante' ') grundsätzlich eine Variante des' ClassPathScanningCandidateComponentProvider' verwendet, um Beans zu finden. Der Ausschluss fügt einfach einen Ausschlussfilter zu diesem Objekt hinzu, sodass einige Beans nicht berücksichtigt werden. Sie können das Ganze unter 'org.springframework.context.annotation.ComponentScanBeanDefinitionParser' auschecken –