Edit : la solution ne marche pas. J'en recherche une autre à la place.
Quelque propose
@Inject
@Nullable
private SomeBean someBean;
Je ne sais pas s'il s'agit des Annotations JetBrains ou de la lib JSR de FindBugs.
Si vous êtes sur Java 8 ou plus (rappel, la dernière version LTS est Java 17, si vous êtes encore sous Java 8 / 11 vous êtes en retard) alors vous pouvez remplacer :
@Autowired(required = false)
private SomeBean someBean;
Par ceci :
@Inject
private Optional<SomeBean> someBean;
Le but étant pour moi de sortir plusieurs projets de Spring, il faut donc y aller par petits bouts, en commençant par remplacer les annotations de Spring.
En résumé si l'on passe par un contexte Spring chargé au moyen de la classe AnnotationConfigApplicationContext
nous avons :
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public RepositoryFactorySupport userRepository(EntityManager entityManager) {
return new JpaRepositoryFactory(entityManager);
}
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public UserRepository userRepository(RepositoryFactorySupport factory) {
return factory.getRepository(UserRepository.class);
}
N.B : j'ai supposé que tout était en scope prototype
puisque tout utilise un EntityManager
qui est une entité recréée à chaque fois et qui est jetable.
Comme ça faisait un moment que je n'avais pas créé des beans à la main (et utilisé Spring Context aussi), je me le note au cas où ça se reproduirait.
Voici le diagramme résumé
Après Log4j au tour de Spring d'avoir sa faille zero-day.
Tout est dit ! Et j'adore Kotlin c'est vous dire. Mais je préfère me tirer une balle que de faire du annotation-driven-development avec un java-procedural-spring-singleton-base programming.
Si je disais précédemment que la PF pure était un cancer, alors Spring et ce mode de programmation est un cancer metastasé !
Merci à @Philou qui me comprends et qui m'a offert ce lien.
SpringBoot scanne notre CLASSPATH à la recherche de tous les frameworks connus pour les instancier pour nous (parce que nous sommes sûrement de gros débiles). Aussi, dès qu'il trouve l'existence de Flyway dans votre CLASSPATH , il charge une instance de Flyway dès démarrage de Spring et exécute automatiquement un DB migrate (déjà l'aspect "tu touches à ma base sans me demander mon avis" m'énerve au plus au point mais admettons).
Bref, nous devons dire explicitement à Spring d'exclure Flyway de l'auto-instanciation et donc voici la solution :
@EnableAutoConfiguration(exclude=FlywayAutoConfiguration.class)
This tutorial walks us through the process of creating a simple REST controller with Spring Boot
Parce que je vais refaire du Spring Boot et du Hibernate 😥. Encore que Spring Boot ça va encore, c'est juste que ça rame au startup. D'ailleurs, nous devrions l'appeler Spring SlowBoot, ce serait plus parlant à mon avis.
Un tuto sur Spring-test. Il faut en lire plus souvent des comme celui-là.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<!-- Package to scan in order to found configuration -->
<!--<context:annotation-config/>-->
<context:component-scan base-package="package.a.scanner" />
<!-- Transaction -->
<!--<tx:annotation-driven transaction-manager="jpaTransactionManager" />-->
<!-- JPA -->
Comment configurer un projet Spring 4 avec les annotations.
Fourni en prime une démo sympa de la couche hibernate et de spring-orm.
Comment se servir de l'annotation @Component & @ComponentScan de Spring 3
Un tuto (esquisse de tuto) sur Sprint Test et les tests d'intégrations.
Une liste de tuto Spring pour fabriquer des services REST (et bien d'autres choses aussi)
Truc top-moumoutte pour faire des web-apps fastoche dont les features partie serveur sont exposées en REST.