Встречается на собеседованиях • сегодня
Можно ли сделать Proxy для обычного класса без использования Spring
Да, можно создать Proxy для обычного класса без Spring, используя стандартные средства Java: java.lang.reflect.Proxy (для интерфейсов) или библиотеки типа CGLIB/ByteBuddy (для классов без интерфейсов).
Пример с интерфейсом:
java
interface Service {
void doWork();
}
class RealService implements Service {
public void doWork() {
System.out.println("Real work");
}
}
Service proxy = (Service) Proxy.newProxyInstance(
Service.class.getClassLoader(),
new Class[]{Service.class},
(p, method, args) -> {
System.out.println("Before method");
Object result = method.invoke(new RealService(), args);
System.out.println("After method");
return result;
}
);
proxy.doWork(); // Вызовет логирование + реальный метод
text
Для классов без интерфейсов используйте CGLIB:
```java
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(MyClass.class);
enhancer.setCallback((MethodInterceptor) (obj, method, args, proxy) -> {
System.out.println("Before");
Object result = proxy.invokeSuper(obj, args);
System.out.println("After");
return result;
});
MyClass proxy = (MyClass) enhancer.create();Ограничения:
Proxyработает только с интерфейсами.- CGLIB требует пустого конструктора.
- Оба подхода добавляют накладные расходы.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы