J'ai une classe d'aide héritée existante sans annotation de haricots et sans configuration XML. Je souhaite créer des haricots pour les mêmes classes sans modification (sans ajouter d'annotations) et sans configuration supplémentaire dans XML. C'est possible? p>
3 Réponses :
Oui, c'est possible et assez simple. Vous devez créer votre propre classe et l'annoter avec @configuration code>, puis créer une méthode annotée avec
@bean code> renvoyant votre classe d'assistance. Quelque chose comme ça:
Vous pouvez appeler une méthode @bean code> à partir d'un autre à l'aide de
@configuration code> et obtenir une instance entièrement initialisée, comme suit:
public class Foo {
@Value("Hello, world!")
public String value;
}
@Configuration
public class Config {
@Bean
public Foo createFoo() {
Foo foo = new Foo();
System.out.println(foo.value); // Prints null - foo not initialized yet
return foo;
}
@Bean
public Bar createBar() {
Foo foo = createFoo();
System.out.println(foo.value); // Prints Hello, world! - foo have been initialized by the interceptor
return new Bar(foo);
}
}
Une autre option consiste à utiliser un beandefinitionRegistrypostProcesseur code> et enregistrez vos cours manuellement.
@RunWith(SpringRunner.class)
@SpringBootTest
public class LegacyBeansAutoConfigurationTest {
@Autowired
ApplicationContext context;
@Test
public void contextLoads() {
Assertions.assertThat(context.getBeanNamesForType(LegacyBeansAutoConfiguration.Legacy1.class)).isNotNull();
Assertions.assertThat(context.getBeanNamesForType(LegacyBeansAutoConfiguration.Legacy2.class)).isNotNull();
Assertions.assertThat(context.getBeanNamesForType(LegacyBeansAutoConfiguration.Legacy3.class)).isNotNull();
}
}