spring-projects / spring-projects/spring-security
Application won't start when we use a custom JpaRepositoryFactoryBean with constructor injection and have org.springframework.boot::spring-boot-starter-oauth2-client as a dependency in pom
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 9.6k
- Forks
- 6.3k
- Avg merge
- 2d 11h
- Merged PRs (30d)
- 52
Description
Spring Boot Version
3.5.7
Describe the bug
Suppose we have
public class CustomBaseJpaRepositoryFactoryBean<T extends Repository<S, ID>, S, ID> extends JpaRepositoryFactoryBean<T, S, ID> {
private final ApplicationContext applicationContext;
public CustomBaseJpaRepositoryFactoryBean(Class<? extends T> repositoryInterface, ApplicationContext applicationContext) {
super(repositoryInterface);
this.applicationContext = applicationContext;
}
@Override
protected RepositoryFactorySupport createRepositoryFactory(EntityManager entityManager) {
return new CustomBaseJpaRepositoryFactory(entityManager, applicationContext);
}
}
If we have in pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
Then the application won't start. Here are logs:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.5.7)
2025-11-14T21:55:26.805+01:00 INFO 26818 --- [custom-simple-jpa-repository-constructor-injection-bug] [ main] sitoryConstructorInjectionBugApplication : Starting CustomSimpleJpaRepositoryConstructorInjectionBugApplication using Java 21.0.5 with PID 26818 (/home/matevskial/Privy/dev/custom-simple-jpa-repository-constructor-injection-bug/target/classes started by matevskial in /home/matevskial/Privy/dev/custom-simple-jpa-repository-constructor-injection-bug)
2025-11-14T21:55:26.806+01:00 INFO 26818 --- [custom-simple-jpa-repository-constructor-injection-bug] [ main] sitoryConstructorInjectionBugApplication : No active profile set, falling back to 1 default profile: "default"
2025-11-14T21:55:27.066+01:00 INFO 26818 --- [custom-simple-jpa-repository-constructor-injection-bug] [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2025-11-14T21:55:27.094+01:00 INFO 26818 --- [custom-simple-jpa-repository-constructor-injection-bug] [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 23 ms. Found 1 JPA repository interface.
2025-11-14T21:55:27.247+01:00 WARN 26818 --- [custom-simple-jpa-repository-constructor-injection-bug] [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'someRepository' defined in com.matevskial.customsimplejparepositoryconstructorinjectionbug.customsimplejparepositoryconstructorinjectionbug.SomeRepository defined in @EnableJpaRepositories declared on CustomSimpleJpaRepositoryConstructorInjectionBugApplication: Unsatisfied dependency expressed through constructor parameter 1: Ambiguous argument values for parameter of type [org.springframework.context.ApplicationContext] - did you specify the correct bean references as arguments?
2025-11-14T21:55:27.251+01:00 INFO 26818 --- [custom-simple-jpa-repository-constructor-injection-bug] [ main] .s.b.a.l.ConditionEvaluationReportLogger :
Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2025-11-14T21:55:27.259+01:00 ERROR 26818 --- [custom-simple-jpa-repository-constructor-injection-bug] [ main] o.s.boot.SpringApplication : Application run failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'someRepository' defined in com.matevskial.customsimplejparepositoryconstructorinjectionbug.customsimplejparepositoryconstructorinjectionbug.SomeRepository defined in @EnableJpaRepositories declared on CustomSimpleJpaRepositoryConstructorInjectionBugApplication: Unsatisfied dependency expressed through constructor parameter 1: Ambiguous argument values for parameter of type [org.springframework.context.ApplicationContext] - did you specify the correct bean references as arguments?
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:785) ~[spring-beans-6.2.12.jar:6.2.12]
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:240) ~[spring-beans-6.2.12.jar:6.2.12]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1395) ~[spring-beans-6.2.12.jar:6.2.12]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1232) ~[spring-beans-6.2.12.jar:6.2.12]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getSingletonFactoryBeanForTypeCheck(AbstractAutowireCapableBeanFactory.java:1034) ~[spring-beans-6.2.12.jar:6.2.12]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:916) ~[spring-beans-6.2.12.jar:6.2.12]
at org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:664) ~[spring-beans-6.2.12.jar:6.2.12]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:652) ~[spring-beans-6.2.12.jar:6.2.12]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:612) ~[spring-beans-6.2.12.jar:6.2.12]
at org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeIncludingAncestors(BeanFactoryUtils.java:264) ~[spring-beans-6.2.12.jar:6.2.12]
at org.springframework.security.config.annotation.web.configuration.OAuth2ClientConfiguration$OAuth2AuthorizedClientManagerRegistrar.getBeanNamesForType(OAuth2ClientConfiguration.java:426) ~[spring-security-config-6.5.6.jar:6.5.6]
at org.springframework.security.config.annotation.web.configuration.OAuth2ClientConfiguration$OAuth2AuthorizedClientManagerRegistrar.postProcessBeanDefinitionRegistry(OAuth2ClientConfiguration.java:190) ~[spring-security-config-6.5.6.jar:6.5.6]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) ~[spring-context-6.2.12.jar:6.2.12]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:148) ~[spring-context-6.2.12.jar:6.2.12]
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:791) ~[spring-context-6.2.12.jar:6.2.12]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:609) ~[spring-context-6.2.12.jar:6.2.12]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.5.7.jar:3.5.7]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752) ~[spring-boot-3.5.7.jar:3.5.7]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) ~[spring-boot-3.5.7.jar:3.5.7]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) ~[spring-boot-3.5.7.jar:3.5.7]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1361) ~[spring-boot-3.5.7.jar:3.5.7]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1350) ~[spring-boot-3.5.7.jar:3.5.7]
at com.matevskial.customsimplejparepositoryconstructorinjectionbug.customsimplejparepositoryconstructorinjectionbug.CustomSimpleJpaRepositoryConstructorInjectionBugApplication.main(CustomSimpleJpaRepositoryConstructorInjectionBugApplication.java:14) ~[classes/:na]
Process finished with exit code 1
To Reproduce
-
Use this minimal reproducible example: https://github.com/matevskial/custom-simple-jpa-repository-constructor-injection-bug
-
Clone the repo
-
Compile:
mvn clean package -
Run the application
java -jar target/custom-simple-jpa-repository-constructor-injection-bug-0.0.1-SNAPSHOT.jar
Expected behavior
The application should start
Note:
If we use @Autowired instead constructor injection, the application will start normally:
public class CustomBaseJpaRepositoryFactoryBean<T extends Repository<S, ID>, S, ID> extends JpaRepositoryFactoryBean<T, S, ID> {
@Autowired
private ApplicationContext applicationContext;
public CustomBaseJpaRepositoryFactoryBean(Class<? extends T> repositoryInterface) {
super(repositoryInterface);
}
@Override
protected RepositoryFactorySupport createRepositoryFactory(EntityManager entityManager) {
return new CustomBaseJpaRepositoryFactory(entityManager, applicationContext);
}
}
Sample
A link to a GitHub repository with a minimal, reproducible sample.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Clone the linked minimal repository and run mvn clean package, then launch the jar to reproduce the failure. Start with the constructor resolution in ConstructorResolver and the OAuth2 client path in OAuth2ClientConfiguration, comparing the constructor-injection and @Autowired variants. Done means the sample application starts successfully with constructor injection and the OAuth2 client dependency present.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java, spring, spring-boot
- Domain
- authentication, backend, security
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100