在开发SpringBoot程序时,可以把配置文件中的配置动态的配置为配置类,如:
package com.**.**.**.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "jwt")
@Data
public class JWTConfig {
private String clientId;
private String clientSecret;
private String clientUrl;
private String grantType;
private String checkUrl;
private String keyUrl;
}
/*
* 说明:
* 使用@ConfigurationProperties这个注解,IDEA会出现一个提示,需要加入processor的一个依赖,在pom中直接加入下面依赖即可
* <dependency>
* <groupId>org.springframework.boot</groupId>
* <artifactId>spring-boot-configuration-processor</artifactId>
* <optional>true</optional>
* </dependency>
* 使用@ConfigurationProperties这个注解,需要此类通过Spring来进行管理,所以需要配合@Compoent来一起使用。
* @Data为lombok的包,可以省下书写大量的getter、setter、toString、HashCode、constructor等。
* 使用lombok在pom中加入下面的依赖即可。
* <dependency>
* <groupId>org.projectlombok</groupId>
* <artifactId>lombok</artifactId>
* <optional>true</optional>
* </dependency>
*/
下面为application.yml中的部分
# jwt token config
jwt:
clientId: ***
clientSecret: ***
clientUrl: ***
grantType: **
checkUrl: **
keyUrl: **
这样在其他使用的地方就可以直接@Autowired来使用了。
但是在util这样的工具类中,提供的方法都是static静态的,这样直接注入类就不是很适合,所以需要通过Spring
来get到这个Bean,所以书写了SpringContextUtil来获取Bean,代码如下:
package com.**.**.**.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* @ClassName SpringContextUtil
* @Description Spring工具类,用来获取bean
* @projectName **
* @Author wangjian
* @Date 19/06/26 15:31
* @Version <1.0>
*/
@SuppressWarnings({"unused"})
@Component
public class SpringContextUtil implements ApplicationContextAware {
public static final Logger logger = LoggerFactory.getLogger(SpringContextUtil.class);
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
logger.info("applicationContext:" + SpringContextUtil.applicationContext);
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
public static Object getBean(String name) {
return getApplicationContext().getBean(name);
}
public static <T> T getBean(Class<T> clazz) {
return getApplicationContext().getBean(clazz);
}
public static <T> T getBean(String name, Class<T> clazz) {
return getApplicationContext().getBean(name, clazz);
}
}
这样在使用的地方可以通过SpringContextUtil来获取一个Bean,如:
JWTConfig jwtConfig = SpringContextUtil.getBean(JWTConfig.class);