InitializingBean的项目开发使用

在开发过程中经常会遇到业务逻辑比较复杂,有时根据不同的情况处理不同的业务。这里可以使用 InitializingBean 在项目初始化的时候,对一些数据进行缓存。

InitializingBean 的使用场景:InitializingBean 项目中需要在项目初始化的时候,对一些常用数据进行缓存  使用spring中的InitializingBean接口,监听spring的启动过程,在spring装载完所有的bean的时候,会自动调用实现InitializingBean的afterPropertiesSet()方法。

项目使用逻辑:

package com.example.dl.demo1;

import org.springframework.beans.factory.InitializingBean;

import java.util.List;

/**
 * @author D-L
 * @program:
 * @description:   InitializingBean  项目中需要在项目初始化的时候,对一些常用数据进行缓存
 *                 使用spring中的InitializingBean接口,监听spring的启动过程,在spring装载完所有的bean的时候,会自动调用实现InitializingBean的afterPropertiesSet()方法
 * @date 2021-01-11 10:56:35
 */

public interface DlMoudleService extends InitializingBean {

    /**获取类型*/
    String getMoudleType();

    /**处理具体业务逻辑*/
    void doMoudleData(String code, List<String> dataList);

}

具体的实现类:

package com.example.dl.demo1;

import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author D-L
 * @program:
 * @description:  使用spring中的InitializingBean接口,监听spring的启动过程,在spring装载完所有的bean的时候,会自动调用实现InitializingBean的afterPropertiesSet()方法
 * @date 2021-01-11 11:00:10
 */
@Service
public class AdMoudleServiceImpl implements DlMoudleService {
    @Override
    public String getMoudleType() {
        /**给出具体的类型*/
        return "MOUDLE01";
    }

    @Override
    public void doMoudleData(String code, List<String> dataList) {
        System.out.println("this is moudle01----------------------");
    }

    /**
     * 将当前实例化bean放入缓存中
     * @throws Exception
     */
    @Override
    public void afterPropertiesSet() throws Exception {
        /**获取类型 调用者个根据 不同的类型执行不同的实现逻辑*/
        String moudleType = getMoudleType();
        DlMoudleContainer.getInstance().add( moudleType,this);
    }
}

封装bean缓存以及获取方法 提供单例模型:

package com.example.dl.demo1;

import java.util.HashMap;
import java.util.Map;

/**
 * @author D-L
 * @program:
 * @description: 封装bean缓存以及获取方法 提供单例模型
 * @date 2021-01-11 11:03:52
 */

public class DlMoudleContainer {

    /**存放缓存实例化bean*/
    private Map<String ,DlMoudleService> moudles = new HashMap<>();

    /**
     * 使用静态内部类构造单例
     */
    public static class DlMoudleSingle{
        private static DlMoudleContainer instance = new DlMoudleContainer();
    }

    /**获取单例对象*/
    public static DlMoudleContainer getInstance() {
        return DlMoudleSingle.instance;
    }

    /**添加实例化bean*/
    public void add(String type , DlMoudleService command){
        moudles.put(type , command);
    }

    /**通过类型获取bean*/
    public DlMoudleService get (String type){
        return moudles.get(type);
    }

}

具体的调用:

package com.example.dl.demo1;


import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

/**
 * @author D-L
 * @program:
 * @description:
 * @date 2021-01-11 11:23:55
 */
@RestController
@RequestMapping("test")
public class DoMoudleDataController {

    @GetMapping("doMoudle")
    public String doMoudle(){
        DlMoudleService service = DlMoudleContainer.getInstance().get("MOUDLE01");
        List<String> list = new ArrayList<>();
        if(null != service){
            service.doMoudleData("M00001", list);
        }else {
            System.out.println("service is null-------------------");
        }
        return "success------------------";
    }
}
原文地址:https://www.cnblogs.com/dongl961230/p/14270988.html