/** * Copyright (c) 2018-2028, DreamLu 卢春梦 ([email protected]). * <p> * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * <p> * http://www.gnu.org/licenses/lgpl.html * <p> * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springblade.core.cloud.feign; import feign.Target; import feign.hystrix.FallbackFactory; import lombok.AllArgsConstructor; import org.springframework.cglib.proxy.Enhancer; /** * 默认 Fallback,避免写过多fallback类 * * @param <T> 泛型标记 * @author L.cm */ @AllArgsConstructor public class BladeFallbackFactory<T> implements FallbackFactory<T> { private final Target<T> target; @Override @SuppressWarnings("unchecked") public T create(Throwable cause) { final Class<T> targetType = target.type(); final String targetName = target.name(); Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(targetType); enhancer.setUseCache(true); enhancer.setCallback(new BladeFeignFallback<>(targetType, targetName, cause)); return (T) enhancer.create(); } }