У меня есть следующая общая реализация перехватчика метода cglib:
public class EntityInterceptor<T, PK> implements MethodInterceptor{
private EntityChangeType changeType;
private T entity;
private GenericCrudMapper<T,PK> mapper;
public EntityInterceptor(T entity, GenericCrudMapper<T, PK> mapper){
this.entity = entity;
this.mapper = mapper;
}
@Override
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
// pass through
return proxy.invoke(entity, args);
}
public void setEntityChangeType(EntityChangeType changeType){
this.changeType = changeType;
}
public void saveChanges(){
// @todo
}
}
, который используется следующим образом:
@Override
public Airport get(String id) {
Airport airport = airportMapper.findById(id);
if(airport != null){
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(Airport.class);
enhancer.setCallback(new EntityInterceptor<>(airport, airportMapper));
airport = (Airport) enhancer.create();
return airport;
}
return airport;
}
Могу ли я с уверенностью предположить, что созданный выше метод-перехватчик будет созданна расширенный экземпляр класса (другими словами, при назначении перехватчиков методов они не разделяются между всеми экземплярами класса)?