alibaba/COLA · error · RuntimeException

Component ${targetClz} can not be found in Spring Container

Error message

Component ${targetClz} can not be found in Spring Container

What it means

ApplicationContextHelper.getBean(Class) is a static convenience for fetching a Spring bean by type. It first tries applicationContext.getBean(targetClz), then falls back to a lookup by a de-capitalized simple class name. If both lookups return nothing, it throws this RuntimeException, meaning no bean of that class (or conventional bean name) is registered in the Spring container.

Source

Thrown at cola-archetypes/cola-archetype-light/src/main/resources/archetype-resources/src/main/java/domain/ApplicationContextHelper.java:35

        ApplicationContextHelper.applicationContext = applicationContext;
    }

    public static <T> T getBean(Class<T> targetClz) {
        T beanInstance = null;
        //优先按type查
        try {
            beanInstance = (T)applicationContext.getBean(targetClz);
        } catch (Exception e) {
        }
        //按name查
        if (beanInstance == null) {
            String simpleName = targetClz.getSimpleName();
            //首字母小写
            simpleName = Character.toLowerCase(simpleName.charAt(0)) + simpleName.substring(1);
            beanInstance = (T)applicationContext.getBean(simpleName);
        }
        if (beanInstance == null) {
            throw new RuntimeException("Component " + targetClz + " can not be found in Spring Container");
        }
        return beanInstance;
    }

    public static Object getBean(String claz) {
        return ApplicationContextHelper.applicationContext.getBean(claz);
    }

    public static <T> T getBean(String name, Class<T> requiredType) {
        return ApplicationContextHelper.applicationContext.getBean(name, requiredType);
    }

    public static <T> T getBean(Class<T> requiredType, Object... params) {
        return ApplicationContextHelper.applicationContext.getBean(requiredType, params);
    }

    public static ApplicationContext getApplicationContext() {
        return applicationContext;

View on GitHub (pinned to 352e1a8675)

Solutions

  1. Verify the class is annotated with a Spring stereotype (@Component/@Service/@Repository) and its package is included in component scanning.
  2. Ensure the bean name matches the lookup: if the bean has a custom @Component("name"), look it up by that name via getBean(String).
  3. Check that ApplicationContextHelper.applicationContext is populated (class implements ApplicationContextAware and is itself registered as a bean) before calling getBean.
  4. If used in tests, bootstrap a Spring context (@SpringBootTest or ApplicationContextRunner) instead of calling the helper statically.

Example fix

// before
MyService svc = ApplicationContextHelper.getBean(MyService.class); // throws if not a bean
// after
@Component // ensure class is registered and scanned
public class MyService { ... }
MyService svc = ApplicationContextHelper.getBean(MyService.class);
Defensive patterns

Strategy: try-catch

Validate before calling

if (!beanDefined(ApplicationContextHelper.getApplicationContext(), MyService.class)) {
    throw new IllegalStateException("MyService is not registered as a Spring bean");
}

Type guard

public static <T> boolean isSpringBeanAvailable(ApplicationContext ctx, Class<T> clz) {
    if (ctx == null) return false;
    String name = Character.toLowerCase(clz.getSimpleName().charAt(0)) + clz.getSimpleName().substring(1);
    return ctx.getBeanNamesForType(clz).length > 0 || ctx.containsBean(name);
}

Try / catch

try {
    MyService svc = ApplicationContextHelper.getBean(MyService.class);
} catch (RuntimeException e) {
    if (e.getMessage() != null && e.getMessage().startsWith("Component ")) {
        // fall back: construct manually or log configuration error
    } else {
        throw e;
    }
}

Prevention

When it happens

Trigger: Calling ApplicationContextHelper.getBean(SomeClass.class) when the class is not annotated as a Spring component (e.g. missing @Component/@Service) or is not covered by component scanning; also when the applicationContext static field has not been injected yet (helper used before the Spring context finished refreshing).

Common situations: A newly created class was forgotten in a package excluded from @ComponentScan; using the helper in a unit test without a Spring context; using ApplicationContextHelper in code that runs during context startup before setApplicationContext is called; the bean is registered under a custom name that doesn't match the de-capitalized simple name.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of alibaba/COLA@352e1a8675 (2026-09-08). Data as JSON: /api/errors/ae5c52a4bd648cdb. Report an issue: GitHub.