Spring IoC контейнер: области применения бинов, выбор типа прокси для создания
По умолчанию, когда контейнер Spring создает прокси для компонента, размеченного с помощью элемента <aop:scoped-proxy/>, создается прокси класса на основе CGLIB.
CGLIB-прокси перехватывает только публичные вызовы методов! Не вызывайте непубличные методы на таком прокси. Они не делегируются фактическому целевому объекту с областью действия.
В качестве альтернативы вы можете настроить контейнер Spring для создания стандартных прокси на основе интерфейса JDK для таких bean-компонентов, указав значение false для значения атрибута proxy-target-class элемента <aop:scoped-proxy/>. Использование прокси на основе интерфейса JDK означает, что вам не нужны дополнительные библиотеки в пути к классам вашего приложения, чтобы повлиять на такое прокси. Тем не менее, это также означает, что класс объекта EJB должен реализовывать как минимум один интерфейс, и что все соавторы, в которые вводится объект EJB, должны ссылаться на компонент через один из его интерфейсов. В следующем примере показан прокси на основе интерфейса:
<!-- DefaultUserPreferences реализует интерфейс UserPreferences -->
<bean id="userPreferences" class="com.stuff.DefaultUserPreferences" scope="session">
<aop:scoped-proxy proxy-target-class="false"/>
</bean>
<bean id="userManager" class="com.stuff.UserManager">
<property name="userPreferences" ref="userPreferences"/>
</bean>
Читайте также:
- Spring IoC контейнер: области применения бинов
- Spring IoC контейнер: области применения бинов, синглтон
- Spring IoC контейнер: области применения бинов, прототип (prototype)
- Spring IoC контейнер: области применения бинов - Request, Session, Application и WebSocket
- Spring IoC контейнер: области применения бинов, бины с областями применения как зависимости
Комментарии
Отправить комментарий