`
v7sky
  • 浏览: 76781 次
文章分类
社区版块
存档分类
最新评论

【Spring】类加载

阅读更多
项目中常会有这样的需求:
启动某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);
          }  
      }
}


解决。
0
0
分享到:
评论

相关推荐

    Spring动态加载配置文件

    在Spring框架中,动态加载配置文件是一项重要的功能,它使得开发者在开发过程中无需重启应用就能实时更新配置,极大地提高了开发效率。热部署方案是这一功能的具体应用,它允许我们在不中断服务的情况下,对应用程序...

    Spring IoC加载流程讲解

    Spring IoC 加载流程讲解 在本节中,我们将对 Spring IoC 加载流程进行详细的讲解,并探讨 IoC 思想和依赖倒置原则的应用。 IoC 控制反转 IoC(Inversion of Control)是指在软件设计中,将对象实例的控制权从...

    详解spring boot容器加载完后执行特定操作

    "Spring Boot 容器加载完成后执行特定操作" Spring Boot 框架提供了多种方式来执行容器加载完成后的特定操作,例如使用 ApplicationListener 接口或使用 @PostConstruct 注解。在本文中,我们将介绍使用 ...

    Spring boot 热加载 springloaded-1.2.4.RELEASE JAR包

    SpringLoaded是Spring框架的动态代理加载器,它实现了Java的类加载机制,可以在应用运行时自动检测源代码的变化,并实时重载修改后的类,从而避免了每次修改代码都需要重新构建和启动应用的繁琐步骤。SpringLoaded ...

    springboot+java类热加载

    在Java中,类加载器负责查找并加载类到Java虚拟机中。我们可以通过自定义类加载器来实现热加载。例如,`MemoryClassLoader.java`可能就是一个自定义类加载器的实现,它可以在内存中动态加载或更新类。 **JarinJAR**...

    spring加载顺序讨论

    本文将详细探讨Spring加载顺序,并结合`@PostConstruct`、`构造方法`以及`@Autowired`等关键注解进行深入解析。 首先,Spring容器在启动时会读取配置文件(如XML或Java配置类),根据配置信息创建Bean的定义。Bean...

    spring项目启动加载类到静态服务类中的三种方式.zip

    本教程将详细阐述三种不同的方式,将Spring项目启动时加载的类集成到静态服务类中。 1. **使用`ApplicationContextAware`接口** `ApplicationContextAware`是Spring提供的一个接口,它允许我们在类中注入...

    spring 重新动态加载数据库或xml中的bean,可以不用重启tomcat

    spring 重新动态加载数据库或xml中的bean,可以不用重启tomcat

    springioc加载流程图.pdf

    springioc加载流程图.pdf

    springBean加载过程源码解析文档,附有代码类名和行数

    ApplicationContextInitializer 是 Spring 上下文初始化类,负责加载配置文件和注册 Bean。通过查看源码,我们可以发现 Spring 自动加载配置文件的代码。 SpringApplication 运行 SpringApplication 的 run 方法是...

    spring加载

    1. **配置文件解析**:Spring的启动通常始于一个或多个配置文件,如XML或Java配置类。这些配置文件定义了bean的定义,包括bean的类型、属性、依赖关系等。Spring通过BeanDefinitionReader读取这些配置,将其转化为...

    Spring Boot 全局懒加载机制.docx

    Spring Boot 2.2及更高版本引入了一个全局懒加载机制,允许用户通过配置开启整个应用的bean懒加载,以优化启动时间和资源利用。 在传统的Spring应用中,我们可以通过在bean定义上添加`@Lazy`注解来实现单个bean的懒...

    SpringSecurity加载流程图.vsdx

    SpringSecurity加载流程图 SpringSecurity系统启动流程 SpringSecurity调用流程

    Spring中ApplicationContext加载机制

    1. ClassPathXmlApplicationContext:从类路径下加载配置文件,例如: ```java ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml"); ``` 2. FileSystemXmlApplicationContext:从文件系统...

    springloaded spring-boot 热加载

    springloaded spring-boot 热加载

    Spring bean 动态注册,jar包热替换

    Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class...测试示例中是spring boot 的部分代码,动态加载的内容为接口实现类,且初始化时加载本地的实现类,动态加载后改为非程序加载目录中的jar实现类。

    Spring Bean 加载顺序 .

    Spring支持多种配置方式,包括XML、Java配置类(@Configuration)、注解(@Component、@Service等)以及通过@ConfigurationProperties处理YAML或Properties文件。在实验小例子中,我们可能看到这几种配置方式的组合...

    struts加载spring的方法

    ### Struts加载Spring的方法 在Java Web开发领域中,Struts与Spring是两个非常重要的框架。Struts主要用于构建MVC架构的应用程序,而Spring则是一个轻量级的控制反转(Inversion of Control, IoC)容器,同时也提供...

    spring加载restful(文档+程序源码).zip

    《Spring加载RESTful服务详解及源码分析》 在当今的Web开发中,RESTful API已经成为构建可扩展、易于维护的系统的重要组成部分。Spring框架,作为Java生态系统中的中流砥柱,提供了强大的支持来实现RESTful服务。本...

Global site tag (gtag.js) - Google Analytics