构造静态引用

我们有些静态工具类中如果需要使用到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
// 这一行的 redisUtil 会爆红
redisUtil.get("test");

这个时候我们就需要单独去实例化这个引用,并且变成默认的静态方法如下:

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