2011-06-30 2 views
1

В настоящее время я использую Seasar2 Framework в проекте, в котором я нахожусь. Рамка довольно популярна здесь, в Японии, но у меня проблема с поиском английских документов. Даже на официальном сайте перевода на английском языке они просто обсуждают, что структура использует Injection Dependency и AOP.Как реализовать AOP для изменения содержимого интерфейса Java?

Я был заинтригован тем, как они используют его в одном из компонентов S2Dao. В основном вам нужно всего лишь создать интерфейс DAO-класса и фреймворка автоматически, изменить код во время выполнения и создать промежуточный класс, который вызывается в середине. Следовательно, коды транзакций DB автоматически добавляются в класс. Мне было интересно, есть ли пошаговые объяснения, как это делается? Может ли java изменить код во время выполнения и изменить метод во время выполнения?

Хорошая ссылка на то, как это делается? Я просто хочу знать, как это делает инфраструктура.

ответ

5

Да, возможно выполнение динамических реализаций интерфейса во время выполнения и манипулирование скомпилированным байт-кодом.

Java предоставляет встроенный механизм для реализации интерфейсов во время выполнения, называемый dynamic proxy classes.

Есть также хорошие библиотеки, такие как cglib или javassist, которые позволяют не только реализовать интерфейсы, но и расширить классы и управлять байт-кодом во время выполнения (например, для изменения поведения метода). Рамки, такие как Spring и Hibernate, используют библиотеки, подобные этим, чтобы сделать их magic, поэтому ваша инфраструктура может также использовать некоторые из них.

ПРИМЕЧАНИЕ. Если вам интересно, эти библиотеки могут «настроить» байт-код, потому что вместо использования класса ClassLoader по умолчанию JVM они загружают ваши классы с помощью собственного ClassLoader, поэтому они имеют полный контроль над каждым байтом и они могут делать с ними все, что захотят :).

Смежные вопросы