配Hessian
来源:互联网 发布:横扫千军算法术伤害吗 编辑:程序博客网 时间:2024/05/04 01:25
private ApplicationContext ctx;
protected Log logger = LogFactory.getLog(getClass());
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if(bean.getClass().isAnnotationPresent(HessianService.class)){
Service svc = bean.getClass().getAnnotation(Service.class);
if(svc.value() == null || svc.value().trim().equals("")){
throw new RuntimeException(bean.getClass().getName() + "被申明为HessianService,则必须指定@Service的值");
}
if(bean.getClass().getInterfaces().length > 1 || bean.getClass().getInterfaces().length == 0){
throw new RuntimeException(bean.getClass().getName() + "被申明为HessianService,则必须指定一个且仅一个Interface");
}
DefaultListableBeanFactory factory = (DefaultListableBeanFactory)ctx.getAutowireCapableBeanFactory();
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(HessianServiceExporter.class);
builder.addPropertyReference("service", svc.value());
builder.addPropertyValue("serviceInterface", bean.getClass().getInterfaces()[0].getName());
factory.registerBeanDefinition("/" + svc.value(), builder.getBeanDefinition());
if(logger.isDebugEnabled()){
logger.debug("HessianBeanPostProcessor装载Hessian服务" + svc.value() + "成功!");
}
}
return bean;
}
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
@Override
public int getOrder() {
return Ordered.LOWEST_PRECEDENCE;
}
@Override
public void setApplicationContext(ApplicationContext ctx) throws BeansException {
this.ctx = ctx;
}
public class HessianClientPostProcessor implements BeanPostProcessor, PriorityOrdered, ApplicationContextAware{
protected Log logger = LogFactory.getLog(getClass());
private ApplicationContext ctx;
private static HessianProxyFactory factory;
private static String hessianURL;
private static Map<String, Object> proxies = new HashMap<String, Object>();;
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if(factory == null){
factory = new HessianProxyFactory();
}
if(hessianURL == null){
PafaPropertyPlaceholderConfigurer props = (PafaPropertyPlaceholderConfigurer)ctx.getBean("propertyConfigurer");
hessianURL = (String)props.getConfigurer().get("hessian.server.url");
if(! hessianURL.endsWith("/")){
hessianURL = hessianURL + "/";
}
}
Field[] fields = bean.getClass().getDeclaredFields();
for(Field field : fields){
if( field.isAnnotationPresent(HessianClient.class)){
Class<?> clazz = field.getType();
String name = clazz.getSimpleName();
String url = hessianURL + name;
try {
Object proxy = proxies.get(url);
if(proxy == null){
proxy = factory.create(clazz, url);
proxies.put(url, proxy);
if(logger.isDebugEnabled()){
logger.debug("装载Hessian客户端" + url + "成功!");
}
}
field.setAccessible(true);
field.set(bean, proxy);
} catch (Exception e) {
logger.error("装载Hessian客户端" + url + "失败!", e);
}
}
}
return bean;
}
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
@Override
public int getOrder() {
return Ordered.LOWEST_PRECEDENCE;
}
@Override
public void setApplicationContext(ApplicationContext ctx) throws BeansException {
this.ctx = ctx;
}
- 配Hessian
- Hessian
- hessian
- Hessian
- Hessian
- hessian
- Hessian
- Hessian
- Hessian
- Hessian
- Hessian
- Hessian
- Hessian
- Hessian
- Hessian
- Hessian
- Hessian
- Hessian
- 简析Spring MVC 数据解析
- STL 初学
- php_CORS 跨域
- python文件的读写
- 多线程技术之二RunLoop
- 配Hessian
- javaer to go之mysql操作
- Ajax、servlet、jsp、JSON数据交互以及跳转问题
- AS import工程出现Gradle sync failed: Gradle version 2.2 is required. Current version is 2.10
- 使用URLConnection与HttpClient进行接口对接
- sstable
- android加载网络图片时有效避免OOM
- Poj 3046 Ant Counting【多重背包】
- hdu3790——最短路径问题