使用Spring初始化加载InitializingBean()方法

目录
  • Spring初始化加载InitializingBean()
    • 1、spring初始化bean有两种方式
    • 2、相同点
    • 3、不同点
    • 4、InitializingBean接口定义的源码如下所示
    • 5、由于代码在项目启动的时候会执行afterPropertiesSet()方法
    • 6、这个方法将在所有的属性被初始化后调用
  • 关于InitializingBean简单使用
    • 这是一个Spring组件Filer
    • 实现了afterPropertiesSet方法
    • debug启动项目

Spring初始化加载InitializingBean()

1、spring初始化bean有两种方式

1)实现InitializingBean接口,继而实现afterPropertiesSet的方法 ;

2)利用类反射原理,配置加载文件,使用init-method标签直接注入bean。

2、相同点

实现注入bean的初始化。

3、不同点

实现的方式不一致。

接口比配置效率高,但是配置消除了对spring的依赖。而实现InitializingBean接口依然采用对spring的依赖。

4、InitializingBean接口定义的源码如下所示

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
 
package org.springframework.beans.factory; 
public interface InitializingBean {
    void afterPropertiesSet() throws Exception;
}

该方法在实现之后,会在程序加载完成之后执行。

5、由于代码在项目启动的时候会执行afterPropertiesSet()方法

如果方法中包含修改字段的信息,那么多次启动就会造成多次修改字段的内容。该方法常用的场景是数据库链接中使用。如果多次链接会造成一定的资源浪费。

除了修改字段类型外当然也可以做别的事,如:检查某表是否存在 存在的话里面的某值是否存在 不存在则添加。

6、这个方法将在所有的属性被初始化后调用

但是会在init前调用。如果代码是延迟加载,则马上执行。所以可以在类上加上@Lazy(false)注解,其中添加的内容如下:

    import org.springframework.context.annotation.Lazy;
    @Lazy(false)

这样spring容器初始化的时候afterPropertiesSet就会被调用,只需要实现InitializingBean接口就行。

关于InitializingBean简单使用

InitializingBean接口为bean提供了初始化执行的方法,即afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候会执行该方法。

下面简单示例:

这是一个Spring组件Filer

实现了afterPropertiesSet方法

在这个方法中使用了一个被Autowired注入的Spring Bean:

debug启动项目

可以正常使用被注入的组件!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • spring启动加载程序的几种方法介绍

    关于在spring  容器初始化 bean 和销毁前所做的操作定义方式有三种: 第一种:通过注解@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; public class DataInitializer{ @PostConstruct public void initMethod() throw

  • spring容器启动实现初始化某个方法(init)

    spring容器启动 初始化某方法(init) 1.前言 很多时候,我们需要在项目启动的时候,就要完成某些方法的执行.今天整理了一个简单的方法,使用spring容器中bean的属性:init-method 2.代码 /* 初始化的类.这里不需要添加任何注解 */ public class InitData { @Autowired private UserService userService; /* 初始化方法 */ public void inits(){ System.out.printl

  • Spring中的InitializingBean接口的使用

    InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法. 测试,如下: import org.springframework.beans.factory.InitializingBean; public class TestInitializingBean implements InitializingBean{ @Override public void afterProp

  • 使用Spring初始化加载InitializingBean()方法

    目录 Spring初始化加载InitializingBean() 1.spring初始化bean有两种方式 2.相同点 3.不同点 4.InitializingBean接口定义的源码如下所示 5.由于代码在项目启动的时候会执行afterPropertiesSet()方法 6.这个方法将在所有的属性被初始化后调用 关于InitializingBean简单使用 这是一个Spring组件Filer 实现了afterPropertiesSet方法 debug启动项目 Spring初始化加载Initial

  • jquery跟js初始化加载的多种方法及区别介绍

    jquery和js初始化加载页面的区别: jquery:等待页面加载完数据,以及页面部分元素(不包括图片.视频), js:是页面全部加载完成才执行初始化加载. 1.jQuery 页面加载初始化的方法有3种 ,页面在加载的时候都会执行脚本, 第一种(比较常用): 复制代码 代码如下: $.function(){ alert("第一种方法"); }); 第二种: 复制代码 代码如下: $(document).ready(function(){ alert("第二种方法"

  • 详解Spring中Bean的加载的方法

    之前写过bean的解析,这篇来讲讲bean的加载,加载要比bean的解析复杂些,从之前的例子开始. Spring中加载一个bean的方式: TestBean bean = factory.getBean("testBean"); 来看看getBean(String name)方法源码, @Override public Object getBean(String name) throws BeansException { return doGetBean(name, null, nul

  • Layui table field初始化加载时进行隐藏的方法

    layui应该是现在用的比较多的前端框架了,尤其是layui.table数据表格非常强大. 在很多时候,我们需要从数据库中拿到记录的id,但是我们又不希望在页面上展现,所以需要对一些字段进行隐藏. 看了网上很多的教程,各种对field进行隐藏,通过display:none等常规手段,虽然列是隐藏了,但是整个表格的展现却出了问题. 今天仔细看了文档,原来layui中已经封装了field隐藏的方法: 用法: {field:'id',title:'ID' ,hide:true},直接在fieId中,使

  • spring boot加载freemarker模板路径的方法

    1,之前用的eclipse开发工具来加载spring boot加载freemarker模板路径,现在换用idea却不能使用了,所以来记录一下 加载freemarker模板三种方式,如下 public void setClassForTemplateLoading(Class clazz, String pathPrefix); public void setDirectoryForTemplateLoading(File dir) throws IOException; public void

  • Scratch3.0初始化加载七牛云上的sbs文件的方法

    下面通过代码介绍下Scratch3.0初始化加载七牛云上的sbs文件,代码如下所示: 编写组件 import PropTypes from 'prop-types'; import React from 'react'; import {connect} from 'react-redux'; import {injectIntl, intlShape} from 'react-intl'; import analytics from '../lib/analytics'; import log

  • Spring bean 加载执行顺序实例解析

    本文研究的主要是Spring bean 加载执行顺序的相关内容,具体如下. 问题来源: 有一个bean为A,一个bean为B.想要A在容器实例化的时候的一个属性name赋值为B的一个方法funB的返回值. 如果只是在A里单纯的写着: private B b; private String name = b.funb(); 会报错说nullpointException,因为这个时候b还没被set进来,所以为null. 解决办法为如下代码,同时学习下spring中 InitializingBean

  • spring boot 加载web容器tomcat流程源码分析

    我本地的springboot版本是2.5.1,后面的分析都是基于这个版本 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.1</version> <relativePath/> <!-- lookup parent fr

  • 浅谈SpringBoot资源初始化加载的几种方式

    目录 一.问题 二.资源初始化 一.问题 在平时的业务模块开发过程中,难免会需要做一些全局的任务.缓存.线程等等的初始化工作,那么如何解决这个问题呢?方法有多种,但具体又要怎么选择呢? 二.资源初始化 1.既然要做资源的初始化,那么就需要了解一下springboot启动过程(这里大体说下启动过程,详细:https://www.jb51.net/article/133648.htm) 按照前面的分析,Spring-boot容器启动流程总体可划分为2部分: 执行注解:扫描指定范围下的bean.载入自

随机推荐