账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Java程序中,Spring bean和普通java类的初始化顺序问题
    41
    0

    譬如说我程序中有一个Spring bean如下,它会被一个自定义的Util普通类(里面都是静态方法)所用,

    @Component
    public class SpringContextUtil implements ApplicationContextAware {
    
        private static ApplicationContext context = null;
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext)
            throws BeansException {
        this.context = applicationContext;
        }
    
        public static <T> T getBean(String beanName) {
            return (T) context.getBean(beanName);
        }
    
        public static String getActiveProfile() {
            return context.getEnvironment().getActiveProfiles()[0];
        }
    }
    

    那假如这个Spring Bean在Util类初始化后再初始化肯定不行,那么像这种问题,spring是如何解决的?譬如Util类对Spring Bean的SpringContextUtil.getActiveProfile()的调用会触发该bean的初始化?或者因为该bean未初始化,只是SpringContextUtil类加载了,然后因为applicationContext未注入,导致Null pointer Exception?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 在Spring框架中,所有的Bean都必须在Spring容器启动后才能初始化。也就是说,Spring容器启动后,Spring会为所有类型的Bean创建bean实例。

      至于Java类的初始化顺序问题,Java类的顺序是不确定的。如果在多个类中使用了同一个接口或同一个父类,那么这些类可能会同时被Spring容器实例化。

      在Spring中,我们通常通过Spring配置文件来控制Bean的初始化顺序。配置文件通常会声明一个bean的依赖关系,这样Spring容器就可以按照这个依赖关系的顺序来初始化Bean。

      另外,我们还可以通过调用Spring的@Component@Service@Repository等注解来告诉Spring容器这些类在初始化时需要被加载。

      总的来说,Spring Bean和Java类的初始化顺序主要取决于我们如何在Spring配置文件中配置它们。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部