Skip to content

Non-static method is being referenced from a static context in generate __BeanDefinitions.java while processing AOT #44916

Closed as not planned
@woderchen

Description

@woderchen

Hi, I encountered an issue with Spring AOT. Please help me confirm if this is a bug. Thanks.
【what to do】
generate native file based on Springboot and GraalVM
【issue】:
Once running "mvn -Pnative native:compile",the message appears:
Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:3.4.3:process-aot (process-aot) ...
non-static method getMqMap() cannot be referenced from a static context MqConfig__BeanDefinitions.java

open MqConfig__BeanDefinitions.java in target/spring-aot:

@Generated
public class MqConfig__BeanDefinitions {
  @SuppressWarnings({"rawtypes", "unchecked"})
  Map getMqMap() {
    Map map = new LinkedHashMap(1);
    map.put("topic", "topic1");
    return map;
  }

  public static BeanDefinition getMqBeanDefinition() {
    RootBeanDefinition beanDefinition = new RootBeanDefinition(MqConfig.class);
    beanDefinition.getPropertyValues().addPropertyValue("namespace", "mq1");
    beanDefinition.getPropertyValues().addPropertyValue("servers", "1.1.1.1");
    beanDefinition.getPropertyValues().addPropertyValue("config", getMqMap());
    beanDefinition.setInstanceSupplier(MqConfig::new);
    return beanDefinition;
  }
}

------------refre to my codes and environment as below-------------
env: macos 14.1, springboot(spring-boot-maven-plugin) 3.4.3,Liberica-NIK-23.1.6-1,maven 3.6.3

  1. The relevant content of application.yml is as follows:
akso:
  mq:
    configs:
      - namespace: "mq1"
        servers: "1.1.1.1"
        config:
          topic: "topic1"
  1. MqConfig.java:
public class MqConfig {
    private String namespace;
    private String servers;
    private Map<String, String> config;
    ...setter and getter for above parameters...
}

3.AksoMqConfiguration.java

@Configuration
@ConfigurationProperties(prefix = "akso.mq")
@Import(ImportMqConfig.class)
public class AksoMqConfiguration {
    private List<MqConfig> configs;
    ...setter and getter for above parameters...
}
  1. ImportMqConfig.java
public class ImportMqConfig implements ImportBeanDefinitionRegistrar, EnvironmentAware {
    private AksoMqConfiguration configuration;
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        for (MqConfig config : configuration.getConfigs()) {
            RootBeanDefinition beanDefinition = new RootBeanDefinition();
            beanDefinition.setBeanClass(MqConfig.class);
            MutablePropertyValues values = new MutablePropertyValues();
            values.addPropertyValue("namespace", config.getNamespace());
            values.addPropertyValue("servers", config.getServers());
            values.addPropertyValue("config", config.getConfig()); //=>if i remove this line of code,everything is working.
            beanDefinition.setPropertyValues(values);
            registry.registerBeanDefinition(config.getNamespace(), beanDefinition);
        }
    }
    @Override
    public void setEnvironment(Environment environment) {
        String propertiesName = Objects.requireNonNull(AnnotationUtils.getAnnotation(AksoMqConfiguration.class, ConfigurationProperties.class)).prefix();
        configuration = Binder.get(environment).bind(propertiesName, AksoMqConfiguration.class).get();
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    for: external-projectFor an external project and not something we can fix

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions