class FlexibleAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean
    public Tracer sofaTracer(ObjectProvider<SofaTracerProperties> sofaTracerPropertiesObjectProvider)
                                                                                                     throws Exception {<FILL_FUNCTION_BODY>}

    @Bean
    @ConditionalOnMissingBean
    public MethodInvocationProcessor sofaMethodInvocationProcessor(Tracer tracer) {
        return new SofaTracerMethodInvocationProcessor(tracer);
    }

    @Bean
    @ConditionalOnMissingBean
    public SofaTracerIntroductionInterceptor sofaTracerIntroductionInterceptor(MethodInvocationProcessor methodInvocationProcessor) {
        return new SofaTracerIntroductionInterceptor(methodInvocationProcessor);
    }

    @Bean
    @ConditionalOnMissingBean
    public SofaTracerAdvisingBeanPostProcessor tracerAnnotationBeanPostProcessor(SofaTracerIntroductionInterceptor methodInterceptor) {
        return new SofaTracerAdvisingBeanPostProcessor(methodInterceptor);
    }
}

        SofaTracerProperties sofaTracerProperties = sofaTracerPropertiesObjectProvider
            .getIfUnique();
        String reporterName = null;
        if (sofaTracerProperties != null) {
            reporterName = sofaTracerProperties.getReporterName();
        }
        if (StringUtils.hasText(reporterName)) {
            Reporter reporter = (Reporter) Class.forName(reporterName).getDeclaredConstructor()
                .newInstance();
            Sampler sampler = SamplerFactory.getSampler();
            return new FlexibleTracer(sampler, reporter);
        }
        return new FlexibleTracer();
    
<no_super_class>