@Autowired
SpringContext springContext;
package com.yzf.sysnps.common.core;
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;
import java.util.Map;
@Component
public class SpringContext implements ApplicationContextAware {
private static final Logger log = LoggerFactory.getLogger(SpringContext.class);
private static ApplicationContext applicationContext;
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
SpringContext.applicationContext = applicationContext;
log.info("ApplicationContext registed");
}
public static <T> T getBean(String name, Class<T> clazz) {
checkApplicationContext();
return applicationContext.getBean(name, clazz);
}
public static <T> T getBean(String name) {
checkApplicationContext();
return (T) applicationContext.getBean(name);
}
public static <T> T getBean(Class<T> clazz) {
checkApplicationContext();
Map beanMaps = applicationContext.getBeansOfType(clazz);
if ((beanMaps != null) && (!(beanMaps.isEmpty())))
return (T) beanMaps.values().iterator().next();
return null;
}
private static void checkApplicationContext() {
if (applicationContext == null) {
String eString = "applicaitonContext未注入,请在applicationContext.xml中定义SpringContextUtil";
IllegalStateException exception = new IllegalStateException(eString);
log.error(eString, exception);
throw exception;
}
}
}
使用方式
PayService payService = new PayDefaultServiceImpl();
String busCode = "";
if (StringUtils.isEmpty(busCode)){
try {
busCode = commonService.getBusCodeEnumByTransType(trans.getTransType()).value();
busCode = commonService.getPayBusCode(busCode);
payService = SpringContext.getBean("bus" + busCode, PayService.class);
if (!(payService instanceof PayBaseServiceImpl)) {
payService = new PayDefaultServiceImpl();
}
} catch (BeansException e){
logger.error("No bean named '{}' available", "bus" + busCode);
throw BizException.BUS_CODE_IS_NULL;
}
}
trans.setFronzedFlag("1");
payService.uniqueBiz(trans, paybankOrder, merchInfo);
默认实现
package com.yzf.sysnps.service.service.impl;
import com.yzf.sysnps.common.exception.BizException;
import com.yzf.sysnps.common.model.PayRequest;
import com.yzf.sysnps.common.model.PayResponse;
import com.yzf.sysnps.common.tools.LogFileName;
import com.yzf.sysnps.common.utils.LoggerUtils;
import com.yzf.sysnps.entity.model.BranchInfo;
import com.yzf.sysnps.entity.model.MerchInfo;
import com.yzf.sysnps.entity.model.Trans;
import com.yzf.sysnps.service.model.ActionData;
import com.yzf.sysnps.service.model.ActionRes;
import com.yzf.sysnps.service.model.ActionResData;
import com.yzf.sysnps.service.service.PayService;
import org.slf4j.Logger;
public class PayDefaultServiceImpl implements PayService {
private static final Logger logger = LoggerUtils.Logger(LogFileName.SYSNPS);
@Override
public PayResponse pay(PayRequest payRequest, PayResponse payResponse) throws BizException {
throw new BizException("0001","暂不支持该服务");
}
@Override
public void uniqueBiz(Trans trans, Object orderInfo, MerchInfo merchInfo) throws BizException{
}
}