场景描述:
在开发过程中,有些功能方法更贴合放置在工具类中,并且可以做到使用者不需要引入bean执行方法,可以按工具类静态方法直接使用。但我们会遇到,在工具类中注入bean,无法生效,获取不到的情况。
解决办法:
- 在工具类中定义@Component,是工具类交由spring容器管理;
- 在工具类中,使用@Autowired,注入需要使用的组件,并增加一个静态属性名;
- 使用@PostConstruct, 在容器实例化工具类后,将属性名赋值为注入组件的变量;
之后便可以使用静态属性正常在方法中使用了。
示例:
@Component
@Slf4j
public class ConnectionUtil {
@Autowired
private ConnectionProperties connectionProperties;
// 在其他静态方法中就可以用properties使用了
public static ConnectionProperties properties;
@PostConstruct
public void init(){
properties = connectionProperties;
}