【发布时间】:2019-01-22 19:26:32
【问题描述】:
例如我有如下界面
public interface Converter<I, O> {
public O convert(I input);
}
实现该接口的抽象类
public abstract class AbstractIntegerConverter<T> implements Converter<T, Integer> {
public Integer convert(T input) {
// convert anything to int
}
public abstract Integer defaultValue();
}
以及具体实现
@Component
public class StringToIntegerConverter extends AbstractIntegerConverter<String> {
@Override
public Integer defaultValue() {
// implementation
}
}
我想建议将String 转换为任何东西的所有方法。我创建了以下方面
@Aspect
@Component
public class ConverterAspect {
@Around("execution(* *..*.Converter+.convert(String))")
public Object adviceStringConverter(ProceedingJoinPoint joinPoint) throws Throwable {
// logic
}
}
这不起作用。 Spring 不会为 StringToIntegerConverter 类创建代理。
但是,如果我从抽象类重写 convert(String input) 方法,它就会开始工作,Spring 会成功为 StringToIntegerConverter 创建代理并执行所有需要的逻辑。
@Component
public class StringToIntegerConverter extends AbstractIntegerConverter<String> {
@Override
public Integer convert(String input) {
return super.convert(input);
}
@Override
public Integer defaultValue() {
// implementation
}
}
为什么会这样?有什么方法可以定义切入点,这样我就不需要重写convert(String input) 方法了吗?
【问题讨论】:
标签: java spring aop spring-aop