- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我研究了许多其他关于 Spring Autowiring 问题的 StackOverflow 帖子。这个问题并不像“不要指望@Autowire 对您new
的对象起作用”那么简单。
我有一个从类名构造对象的库。对象类必须扩展类F. 该库不是用 Spring 构建的。它接受一个类加载器来解析类名。它正在这样做:
Class<?> someClass = Class.forName(className, true, classLoader);
if (F.class.isAssignableFrom(someClass)) {
Class<? extends F> fClass = (Class<? extends F>) someClass;
Constructor constructor = fClass.getConstructor(FMap.class, Object.class);
F fobject = (F) constructor.newInstance(parameterMap, applicationContext);
...
该库允许传入一些上下文。这里我提供了 Spring ApplicationContext。F 的一个特定子类在其构造函数中具有如下代码:
ApplicationContext applicationContext = (ApplicationContext)context;
X xbean = (X)applicationContext.getBean("xbean");
S sobject = new S(xbean);
X 类定义如下:
@Component
public class X {
private final Y ybean;
@Autowired
public X(Y ybean) {
this.ybean = ybean;
}
...
Y类是另一个@Component。
sobject
能够调用 xbean
中的方法(xbean 不为 null),但 ybean
为 null。为什么?
我认为Spring在应用程序启动时构建并连接了@Components时间。我预计使用 ApplicationContext 中的对象会给我一个完全构建和连接的对象。
更新 2020 年 6 月 3 日我按照第一个答案中的建议添加了 @PostConstruct。这表明该对象是在应用程序生命周期的早期构建的。
我尝试禁用spring.devtools.restart.enabled
,但行为没有改变。
我尝试禁用spring.main.lazy-initialization
,但行为没有改变。
我从 build.gradle 中删除了 spring-boot-devtools,行为没有任何变化。但是,构造 F 对象和 Y bean 时报告的类加载器是 sun.misc.Launcher$AppClassLoader
我们正在运行 org.springframework.boot:spring-boot-starter-web:2.2.6.RELEASE。
最佳答案
只有当你的类 Y 也存在于 Springs 的应用程序上下文中时,它才会被 Autowiring 。验证您是否确实配置了组件扫描,以便它拾取您的 Y 组件。您可以通过向 Y 添加后构造片段来快速验证这一点。
@PostConstruct
void init() {
logger.info("Here I am");
}
如果您的记录器没有打印任何内容,则 Y 肯定没有加载到应用程序上下文中。
关于java - 为什么从 ApplicationContext 检索到的 bean 中的 @Autowire 为 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62175565/
我想在遗留应用程序中使用 Spring。 核心部分是一个类,我们称之为LegacyPlugin,它代表应用程序中的一种可插入部分。问题是这个类也是数据库连接器,并且用于创建许多其他对象,通常通过构造函
我有 3 个应用上下文: 负责启动 Jetty servlet 容器的全局上下文,从 main() 启动 jetty 中每个 webapp 的 applicationContext 父级(由 Spri
我通过以下代码在应用程序上下文中设置 applicationContext-dao.xml 和 applicationContext-service.xml。 proj
我正在尝试使用 Spring 运行 JUnit 测试,但控制台显示: 无法加载 ApplicationContext 错误。我正在使用 Maven 结构,并且在 src/main/resources
我的applicationContext.xml,webmvc-config.xml在WEB-INF/spring/applicationContext.xml 当我尝试以下操作时,它没有加载,我得到
我正在尝试从 WCSession 获取最新数据我不明白为什么即使我刚刚收到 didReceiveApplicationContext称呼。 更多细节可以直接在代码中获得: //Watch Code o
我正在尝试运行 mvn integration-test阶段,我得到 Failed to load ApplicationContext执行集成测试时出错(单元测试正确执行)。我正在使用 Spring
我在创建测试类时遇到问题。基本上我想测试执行网络调用的 View 模型类。使用 dagger 注入(inject)类网络组件需要上下文参数来检查连接,这是我的 View 模型: class MyVie
我有一个带有 Spring 插件的 struts2 Web 项目。 applicationContext.xml 位于 /WEB-INF/applicationContext.xml 我如何在我的类(
我在一个名为 Controller 的全局类中声明的全局变量有一个小问题,该全局类是从应用程序扩展的。 当我启动 Activity A 时,我在 Controller 中有一个包含 0 个项目的数组列
当我运行我的 spring 集成 junit 类时,我遇到了异常。 这是我的类(class) @RunWith(SpringJUnit4ClassRunner.class) @ContextConfi
我是 java EE spring boot 的新手,我想我会开始一个小项目来掌握一些东西,我目前遇到如上所述的错误 failed to load ApplicationContext 我是不知道为什
我只能在 Spring (3.0.5) jdbc 应用程序(在 Oracle 11.2 上运行)中获取 Activity 的编程事务,当txAdvice指向从应用程序上下文调用的实际方法(mainTe
在servet类中,可以通过这种方式获取spring ApplicationContext ApplicationContext ctx = WebApplicationContextUtils.ge
抱歉,如果我的术语不正确,我是 C# 的新手。我正在尝试使用 ApplicationContext 文件来存储 mysql conn 值,如 dbname、用户名、密码。带有 mysql conn 字
我正在尝试在所有 ContextXXXEvent 上使用 ContextEventListener我为每种事件类型创建了一个监听器,如下所示(ContextRefreshedEvent 是一个示例):
我的应用程序有一个 application-context.xml。现在我将 ApplicationContext 实例化为: ApplicationContext context = new Cla
我正在开发一个 spring 3 web 服务应用程序,我正在尝试从我的 servlett.xml 文件加载 ApplicationContext 以用于一个简单的测试用例,但它不起作用。 Appli
在我的应用程序完成后,我想关闭 spring 上下文。 相关代码有一个 ApplicationContext 引用,但我找不到 close 方法。 最佳答案 贬低你的ApplicationContex
我在尝试为 kotlin 多平台自定义上下文时遇到了这个问题 Actual typealias 'ApplicationContext' has no corresponding expected d
我是一名优秀的程序员,十分优秀!