如注释中所述,问题在于您是在手动创建bean,而不是让Spring容器创建它。基本上,您正在执行以下操作:
new MyBeanOne()
因此,Spring容器无法注入您已配置的任何字段,因此就是
null例如
jdbcTemplatefield。有一些解决方案:
将您
SomeOtherClass
转换为由Spring容器管理的bean,并使其注入MyBeanOne
实例(可能使用@Autowired
注释)。如果由于需要 手动 创建Bean 而无法采用后一种方法,则可以如下所示手动创建Bean:如何动态创建Spring Bean?
但是这种实现使您可以在spring config文件名的 某处 进行 硬编码 ,并在代码中使用它。因此,更好的方法是选择3。
- 看一下这个解决方案:创建新的按需Spring Bean,在其中创建一个客户端抽象类,该类具有Spring将实现的用于检索Spring托管bean的新实例的方法。
我发现了另一种通过使用
@Configurable注释来处理此问题的方法。通过使用此批注装饰Bean,可以按需创建Bean的新实例,Spring将为您管理Spring托管Bean的注入。但是要实现这一点,Spring需要在幕后使用方面,而您应该为项目激活方面的使用。解释很长,因此我提供了深入解释此解决方案的链接:
- Spring框架:7.8将AspectJ与Spring应用程序一起使用
- 通过三个简单的步骤使用Spring的@Configurable
请注意,为了启用此 功能 ,您必须在启动JVM时 添加Java代理 , 该Java代理 将在运行时使用方面来编织类。



