@Component
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext = null;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextUtil.applicationContext = applicationContext;
}
/**
* 获取上下文
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
*
* 根据名称和类型获取Bean
*/
public static <T> T getBean(String name, Class<T> clazz) {
return applicationContext.getBean(name, clazz);
}
/**
*
* 根据类型获取Bean
*/
public static <T> T getBean(Class<T> clazz) {
return applicationContext.getBean(clazz);
}
/**
*
* 根据名称获取Bean
*/
public static Object getBean(String name) {
return applicationContext.getBean(name);
}
/**
*
* 获取容器中指定某类型、或实现某接口、或继承某父类所有的 Bean
*/
public static <T> Map<String, T> getBeansOfType(Class<T> type) {
return applicationContext.getBeansOfType(type);
}
/**
*
* 获取当前环境
*/
public static String getActiveProfile() {
return applicationContext.getEnvironment().getActiveProfiles()[0];
}
/**
*
* @Title: getApplicatioName
* @Description: 获取应用名称
*/
public static String getApplicatioName() {
return applicationContext.getEnvironment().getProperty("spring.application.name");
}
/**
*
* @Title: getDatasourceUrl
* @Description: 获取数据库连接URL
*/
public static String getDatasourceUrl() {
return applicationContext.getEnvironment().getProperty("spring.datasource.url");
}
/**
* @Title: getPropertyValue
* @Description: 获取配置属性值
*/
public static String getPropertyValue(String property) {
return getPropertyValue(property, null);
}
/**
* @Title: getPropertyValue
* @Description: 带默认值的获取配置属性值
*/
public static String getPropertyValue(String property,String defaultValue) {
return applicationContext.getEnvironment().getProperty(property, defaultValue);
}
/**
*
* @Title: getPropertyValue
* @Description: 获取指定的数据类型
* @param property 指定属性
* @param clazz 值类型
* @param defaultValue 默认值
* @return
* @return: T
*/
public static <T> T getPropertyValue(String property, Class<T> clazz, T defaultValue) {
return applicationContext.getEnvironment().getProperty(property, clazz, defaultValue);
}
}
使用方式:
定义一个统一接口
@Component
public interface CommonService {
/**
* @Title: excutorTask
* @Description: 执行不同的实现类的方法
* @param name
* @return: void
* @throws
*/
void executorTask(String name);
}
根据定义的工具类,通过获取bean执行不同的业务逻辑
@Service
@Component
public class Excutor {
public void doTask() {
/**
* 根据不同业务进来的不同逻辑,可以约定为一个key,通过同一的接口执行不同业务
*/
String key = "one";
if (SpringContextUtil.getApplicationContext().containsBean(key)) {
SpringContextUtil.getBean(key,CommonService.class).executorTask("任务1");
} else {
System.out.println("没有该服务");
}
}
}
根据@Service的key值,调用不同的实现类
public interface ServiceKey {
String taskOne = "one";
String taskTwo = "two";
String taskThree = "three";
}
@Service(ServiceKey.taskOne)
@Component
public class TaskOneServiceImpl implements CommonService {
@Override
public void executorTask(String name) {
System.out.println(name + "启动了");
}
}