构造静态引用
我们有些静态工具类中如果需要使用到service,这个时候引入就会有问题,如下所示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| package com.tthk.inland.ticket.core.utils.statistic;
import com.tthk.inland.ticket.core.utils.redis.RedisUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;
@Component public class StaticRedisTemplateComponet {
@Autowired private RedisUtil redisUtil;
private static void test(){ redisUtil.get("test"); } }
|
有时候我们在静态方法里面无法使用@Autowired引入的bean,因为有加载顺序问题会报错
这个时候我们就需要单独去实例化这个引用,并且变成默认的静态方法如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| package com.tthk.inland.ticket.core.utils.statistic;
import com.tthk.inland.ticket.core.configurations.activemq.QueueProducerService; import com.tthk.inland.ticket.core.utils.redis.RedisUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component @RequiredArgsConstructor public class StaticRedisTemplateComponet {
private final QueueProducerService queueProducerService;
private final RedisUtil redisUtil;
private static QueueProducerService staticQueueProducerService;
private static RedisUtil staticRedisUtil;
@PostConstruct public void init() { staticQueueProducerService = this.queueProducerService; staticRedisUtil = this.redisUtil; }
public static RedisUtil getStaticRedisTenService() { return staticRedisUtil; }
public static QueueProducerService getStaticQueueProducerService() { return staticQueueProducerService; } }
|
这样我们就可以用get方法来进行获取
1
| StaticRedisTemplateComponet.getStaticRedisTenService().get("tt_interface_switch",10);
|
第二种方法,比较原始@Autowired会根据bean里面注册的name来进行搜索,如果获取到了,则进行赋值
1 2 3 4 5 6 7 8
| private static ZXSearchNewService_new zxSearchNewService_new; private static QueueProducerService messageService;
@Autowired public zxSearch(QueueProducerService queueProducerService,ZXSearchNewService_new zxSearchNewService_new) { zxSearch.zxSearchNewService_new = zxSearchNewService_new; zxSearch.messageService = queueProducerService; }
|