Calling a @Bean annotated method in Spring java configuration

前端 未结 1 530
长情又很酷
长情又很酷 2020-11-28 20:36

I\'m curious about how spring injection handles calling methods with the @Bean annotation. If I put a @Bean annotation on a method, and return an i

相关标签:
1条回答
  • 2020-11-28 21:18

    Yes, Spring does some magic. Check the Spring Docs:

    This is where the magic comes in: All @Configuration classes are subclassed at startup-time with CGLIB. In the subclass, the child method checks the container first for any cached (scoped) beans before it calls the parent method and creates a new instance.

    This means that the calls to @Bean methods are proxied via CGLIB and therefore the cached version of the bean is returned (a new one is not created).

    The default scope of @Beans is SINGLETON, if you specify a different scope such as PROTOTYPE the call will be passed to the original method.

    Please note that this is not valid for static methods. As per the spring docs:

    Calls to static @Bean methods never get intercepted by the container, not even within @Configuration classes (as described earlier in this section), due to technical limitations: CGLIB subclassing can override only non-static methods. As a consequence, a direct call to another @Bean method has standard Java semantics, resulting in an independent instance being returned straight from the factory method itself.

    0 讨论(0)
提交回复
热议问题