自定义了一个toolsUtil工具类,希望通过一个getImage静态方法返回完整的图片路径,图片路径配置在application.yml文件里,已经写好一个配置文件
代码如下
@ConfigurationProperties(prefix = "phpsong") @Data @Component public class PhpsongConfig { /** * 鉴权的token加密字段 */ private String tokenSecret; /** * 图片域名链接 */ private String imageUrl; }
现在要在工具类ToolsUtil里写一个静态方法getImage,返回拼上域名的图片地址,问题来了
ToolsUtil里无法加载到PhpsongConfig配置,我测试过使用@Autowired注解,使用的时候直接报错,如果是new PhpsongConfig() 在getImageUrl 返回的是空
大神指点下,解决方法如下
/** * * 获取spring容器,以访问容器中定义的其他bean * @author lyltiger * @since MOSTsView 3.0 2009-11-16 */ public class SpringContextUtil implements ApplicationContextAware { // Spring应用上下文环境 private static ApplicationContext applicationContext; /** * 实现ApplicationContextAware接口的回调方法,设置上下文环境 * * @param applicationContext */ public void setApplicationContext(ApplicationContext applicationContext) { SpringContextUtil.applicationContext = applicationContext; } /** * @return ApplicationContext */ public static ApplicationContext getApplicationContext() { return applicationContext; } /** * 获取对象 * 这里重写了bean方法,起主要作用 * @param name * @return Object 一个以所给名字注册的bean的实例 * @throws BeansException */ public static Object getBean(String name) throws BeansException { return applicationContext.getBean(name); } }
在定义一个WebConfig配置类,代码如下
@Configuration public class WebConfig extends MvcConfig { @Bean public SpringContextUtil SpringContextUtilBean() { return new SpringContextUtil(); } }
ToolsUtil类里使用
public class ToolUtil { public static PhpsongConfig newERPConfig = (PhpsongConfig)SpringContextUtil.getBean("phpsongConfig"); public static String getImageUrl(String imagePath){ return newERPConfig.getImageUrl()+imagePath; } }