Skip to content

Conversation

@SentryMan
Copy link
Collaborator

Now this:

@Factory
class MyServiceFactory {

  @Bean
  @RequiresProperty(value = "service.type", equalTo = "one")
  MyService myServiceOne() {
        return new MyServiceOne();
    }

  @Bean
  @RequiresProperty(value = "service.type", equalTo = "two")
  MyService myServiceTwo() {
        return new MyServiceTwo();
    }
}

will generate

  @Override
  public void build(Builder builder) {
    // create beans in order based on constructor dependencies
    // i.e. "provides" followed by "dependsOn"
    build_requires_MyServiceFactory(builder);
    build_requires_MyService(builder);
    build_requires_MyService__MyServiceFactory_build_myServiceTwo(builder);
  }

  @DependencyMeta(type = "io.avaje.inject.generator.models.valid.requires.MyServiceFactory")
  private void build_requires_MyServiceFactory(Builder builder) {
    MyServiceFactory$DI.build(builder);
  }

  @DependencyMeta(
      type = "io.avaje.inject.generator.models.valid.requires.MyService",
      method = "io.avaje.inject.generator.models.valid.requires.MyServiceFactory$DI.build_myServiceOne",
      dependsOn = {"io.avaje.inject.generator.models.valid.requires.MyServiceFactory"},
      autoProvides = {"io.avaje.inject.generator.models.valid.requires.MyService"})
  private void build_requires_MyService(Builder builder) {
    MyServiceFactory$DI.build_myServiceOne(builder);
  }

  @DependencyMeta(
      type = "io.avaje.inject.generator.models.valid.requires.MyService",
      method = "io.avaje.inject.generator.models.valid.requires.MyServiceFactory$DI.build_myServiceTwo",
      dependsOn = {"io.avaje.inject.generator.models.valid.requires.MyServiceFactory"},
      autoProvides = {"io.avaje.inject.generator.models.valid.requires.MyService"})
  private void build_requires_MyService__MyServiceFactory_build_myServiceTwo(Builder builder) {
    MyServiceFactory$DI.build_myServiceTwo(builder);
  }

Resolves #784

@SentryMan SentryMan added this to the 11.4 milestone Mar 28, 2025
@SentryMan SentryMan self-assigned this Mar 28, 2025
@SentryMan SentryMan enabled auto-merge (squash) March 28, 2025 19:47
@SentryMan SentryMan added the bug Something isn't working label Mar 28, 2025
@SentryMan SentryMan requested a review from rbygrave March 28, 2025 20:00
@SentryMan SentryMan merged commit 4fc43df into avaje:master Mar 29, 2025
7 checks passed
@SentryMan SentryMan deleted the factory-bug branch March 29, 2025 00:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Usage of @RequiresProperty on interface with different implementations

2 participants