项目中常会有这样的需求:
启动某web项目,当启动完成后,需要加载一下本地缓存。
此时,加一个 @PostConstruct 注解 搞定。
某次实践时,报空指针异常。这个类结构大概如下
@Component
class A{
@Autowire
B b;
@PostConstruct
public void init(){
//...
doSomething(b); //<-- 这里b为null
//...
}
}
推断可知,应该是spring的类加载顺序导致,class A 还没有注入b的示例,或者b的示例还在构建中。
修改如下
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
@Component
public class A implements ApplicationListener<ContextRefreshedEvent> {
private AtomicInteger initCount = new AtomicInteger(0);
@Autowire
B b;
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
//需要执行的逻辑代码,当spring容器初始化完成后就会执行该方法
//原子类保证只会加载一次
if (1 == initCount.incrementAndGet()) {
doSomething(b);
}
}
}
解决。
分享到:
相关推荐
在Spring框架中,动态加载配置文件是一项重要的功能,它使得开发者在开发过程中无需重启应用就能实时更新配置,极大地提高了开发效率。热部署方案是这一功能的具体应用,它允许我们在不中断服务的情况下,对应用程序...
Spring IoC 加载流程讲解 在本节中,我们将对 Spring IoC 加载流程进行详细的讲解,并探讨 IoC 思想和依赖倒置原则的应用。 IoC 控制反转 IoC(Inversion of Control)是指在软件设计中,将对象实例的控制权从...
"Spring Boot 容器加载完成后执行特定操作" Spring Boot 框架提供了多种方式来执行容器加载完成后的特定操作,例如使用 ApplicationListener 接口或使用 @PostConstruct 注解。在本文中,我们将介绍使用 ...
SpringLoaded是Spring框架的动态代理加载器,它实现了Java的类加载机制,可以在应用运行时自动检测源代码的变化,并实时重载修改后的类,从而避免了每次修改代码都需要重新构建和启动应用的繁琐步骤。SpringLoaded ...
在Java中,类加载器负责查找并加载类到Java虚拟机中。我们可以通过自定义类加载器来实现热加载。例如,`MemoryClassLoader.java`可能就是一个自定义类加载器的实现,它可以在内存中动态加载或更新类。 **JarinJAR**...
本文将详细探讨Spring加载顺序,并结合`@PostConstruct`、`构造方法`以及`@Autowired`等关键注解进行深入解析。 首先,Spring容器在启动时会读取配置文件(如XML或Java配置类),根据配置信息创建Bean的定义。Bean...
本教程将详细阐述三种不同的方式,将Spring项目启动时加载的类集成到静态服务类中。 1. **使用`ApplicationContextAware`接口** `ApplicationContextAware`是Spring提供的一个接口,它允许我们在类中注入...
spring 重新动态加载数据库或xml中的bean,可以不用重启tomcat
springioc加载流程图.pdf
ApplicationContextInitializer 是 Spring 上下文初始化类,负责加载配置文件和注册 Bean。通过查看源码,我们可以发现 Spring 自动加载配置文件的代码。 SpringApplication 运行 SpringApplication 的 run 方法是...
1. **配置文件解析**:Spring的启动通常始于一个或多个配置文件,如XML或Java配置类。这些配置文件定义了bean的定义,包括bean的类型、属性、依赖关系等。Spring通过BeanDefinitionReader读取这些配置,将其转化为...
Spring Boot 2.2及更高版本引入了一个全局懒加载机制,允许用户通过配置开启整个应用的bean懒加载,以优化启动时间和资源利用。 在传统的Spring应用中,我们可以通过在bean定义上添加`@Lazy`注解来实现单个bean的懒...
SpringSecurity加载流程图 SpringSecurity系统启动流程 SpringSecurity调用流程
1. ClassPathXmlApplicationContext:从类路径下加载配置文件,例如: ```java ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml"); ``` 2. FileSystemXmlApplicationContext:从文件系统...
springloaded spring-boot 热加载
Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class...测试示例中是spring boot 的部分代码,动态加载的内容为接口实现类,且初始化时加载本地的实现类,动态加载后改为非程序加载目录中的jar实现类。
Spring支持多种配置方式,包括XML、Java配置类(@Configuration)、注解(@Component、@Service等)以及通过@ConfigurationProperties处理YAML或Properties文件。在实验小例子中,我们可能看到这几种配置方式的组合...
### Struts加载Spring的方法 在Java Web开发领域中,Struts与Spring是两个非常重要的框架。Struts主要用于构建MVC架构的应用程序,而Spring则是一个轻量级的控制反转(Inversion of Control, IoC)容器,同时也提供...
《Spring加载RESTful服务详解及源码分析》 在当今的Web开发中,RESTful API已经成为构建可扩展、易于维护的系统的重要组成部分。Spring框架,作为Java生态系统中的中流砥柱,提供了强大的支持来实现RESTful服务。本...