工具类Util中如何注解注入Service不报空

前言

实际项目中工具类有时候需要注入Service,但是工具类中的方法都是静态的,如果像Controler中注入Service那样操作,将会报空,无法获取Service的实例,那么如何才能正确注入,下文是解决方案。

背景

最近接手的项目是某汽车金融的第三方征信系统,后台管理页面的菜单和各种按钮都不是直接写死在页面的,而是配置在数据库中,然后根据登录用户角色权限动态加载的,因此项目中很多地方都要查询当前登录用户拥有的菜单或者按钮权限,看了下之前的代码,每一个业务都重复着查询菜单或者按钮的代码,看的实在难受,如果业务不断扩展,相同的代码不断复制,整个项目也显得臃肿,于是就想着提出来封装到工具类中。

代码示例

话不多说,直接上代码:

/*
 * 第一步:工具类一定要用@component进行注解
 * @Component 注解作用是把普通POJO实例化到Spring容器中进行管理,相当于配置文件中的<bean id="" class=""/>
 */
@Component
public class MenuAndButtonUtil {
	@Autowired
	private SysMenusService sysMenusService;
	@Autowired
	private SysButtonsService sysButtonsService;
	/*
	 * 第二步:建一个静态的本类
	 */
	private static MenuAndButtonUtil mbUtil;
	/*
	 * 第三步:将本类初始化
	 * @PostConstruct 注解的作用是标注当前方法在项目启动的时候就执行,也可以理解为在Spring容器启动的时候执行,并且只执行一次,可作为一些数据的常规化加载,比如数据字典之类
	 */
	@PostConstruct
	private void init() {
		mbUtil = this;
		mbUtil.sysMenusService = this.sysMenusService;
		mbUtil.sysButtonsService = this.sysButtonsService;
	}
	// 返回当前登录用户角色在指定菜单名下的所有按钮权限集合
	public static List<SysButtons> getSysButtonsByMenuId(HttpSession session, String menuName) {
		List<SysButtons> buttonsList = null;
		try {
			/*
			 * 第四步:Service的调用一定要是     静态本类.xxService.xxMethod();
			 */
			List<SysMenus> sysMenus = mbUtil.sysMenusService.findByMenuName(menuName);
			String operateMenuId = sysMenus.size() == 1 ? sysMenus.get(0).getMenuId() : "wrong";
			SysUsers user = (SysUsers) session.getAttribute("SysUser");
			buttonsList = (List<SysButtons>) mbUtil.sysButtonsService.findByMenuId(user.getRoleCode(), operateMenuId);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return buttonsList;
	}
}

如上,便不会再出现Service为Null的报错。

每天记录一个小知识,分享是一种快乐,点赞是一种美德!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值