找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 280|回复: 0

[博客归档]基于Spring 的util 工具类

[复制链接]

378

主题

55

回帖

2063

积分

管理员

积分
2063
发表于 2022-2-28 09:28:05 | 显示全部楼层 |阅读模式

工具类的一个特点是直接通过类名+方法名直接调用,不存在单例问题,但是如果没有实例,那就无法将工具类交由Spring管理,工具类也就无法通过Spring容器获取其他对象实例(当然如果说通过SpringContextUtil这类东西的话还是可以实现的)。

本质上,工具类就不应该从其他地方去获取计算数据,而是都由参数列表接受,由外部对象去调用,当然,我们这里只讨论基于Spring的util工具类如何去实现

需要实现的效果如下

1、工具类方法直接通过类名.方法名调用(静态方法)

2、可以从Spring 容器中获取计算需要的实例

# 貌似上面两点除了使用SpringContextUtil获取容器对象的方式外无法实现,因为将util对象交由Spring 管理,那么注入的对象不能是静态的,静态方法不能调用非静态成员,因此产生矛盾,所以的话退而求其次,工具类方法不直接通过类名.方法名直接调用,通过单例的方式获取单例工具从而调用工具方法

首先,通过注解@Component 将Util 交由Spring 管理, 这样就可以在工具类里面直接由Spring 自动去注入需要的对象。

其次,保证util单例,构造方法私有化,持有本类的对象实例于当前静态成员当中,并且初始化时机交由Spring Bean 生命周期去管理,简单的说就是利用@Postconstruct 注解,初始化过程 INSTANCE = this

所有的工具方法都不使用静态,改为普通方法,所有的工具类调用通过单例模式完成


简单的代码模板:@Componentpublic Class Util {        public static Util INSTANCE;        // Spring 容器组件,直接通过依赖注入获取对象        @Autowired        private Xxxx xxx;        // 这里就不需要构造函数私有化了,一旦私有,Spring 也就没办法初始化Util 对象        // 单例初始化交由Spring Bean 生命周期管理        @PostConstruct        public void init(){                INSTANCE = this;        }        public String computeXXXXToXXXX(...){                // 工具方法                // 可以直接去调用容器对象        }        }

简单调用方式:Util .INSTANCE.methodXXX()


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Comsenz Inc.

GMT+8, 2024-12-19 22:43 , Processed in 0.116447 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表