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------------------"; } }