ОБНОВЛЕНИЕ: Я использовал другой подход для своей проблемы.Spring - Create bean on the Annotation field
Побочного Вопрос: Я хотел бы знать, как весна делает это с исключающим в SpringBootApplication
В SpringBootApplication:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class))
public @interface SpringBootApplication {
Итак, когда контекст загружается, а EnableAutoConfiguration выполняется , исключения доступны.
То же самое, что я хочу.
В Bean-Creation я хочу знать, если аннотации имеют некоторое поле (например, булевы)
Старый Вопрос:
У меня есть аннотация:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(TaskSpringContext.class)
public @interface TaskTest
{
Class<? extends DatabaseService> db() default DatabaseService.class;
}
Это Аннотация используется по адресу:
@TaskTest(db = DatabaseServiceExtended.class)
@SpringBootApplication()
public class TaskServer
{
public static void main(String[] args)
{
final ApplicationContext ctx = SpringApplication.run(TaskServer.class, args);
}
}
В настоящее время, в TaskSpringContext.class я хочу создать компонент, основанный на БД-Область TaskTest-Аннотация:
@Bean(name = "databaseService")
public DatabaseService databaseService()
{
return ??
Here i want to return the DatabaseServiceExtended
}
Каждый знает, как это сделать?
Нет гарантии, что на вашем пути к классам есть только одна @SpringBootApplication ... Итак, какой из них вы хотите? Тот, где ваш основной метод? Хотя есть способы получить основной класс, ни один из них не очень хорош, если вы спросите меня. Поэтому, возможно, вам захочется поискать альтернативы, потому что я вполне уверен, что есть лучший способ сделать то, что вы хотите сделать, на основе прецедента. –
В аннотации SpringBootApplication есть поле "exclude". Там вы можете указать классы. Эти классы должны быть прочитаны. Это то же самое, чего я хочу. Я хочу создать компонент с аннотацией, и поле аннотации должно помочь создать Bean. – Hesk
Это не очень хорошая практика, чтобы отредактировать ваши вопросы так много, но для ясности ... Весенняя аннотация главным образом просто создает классы/бобы. В этом случае мой ответ ниже должен помочь, поскольку '@ ComponentScan' (и более старый вариант xml' ') в основном использует вариант' ClassPathScanningCandidateComponentProvider' для поиска beans. Исключить просто добавляет фильтр исключения к этому объекту, так что некоторые компоненты не будут рассматриваться. Вы можете проверить все это на 'org.springframework.context.annotation.ComponentScanBeanDefinitionParser' –