日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Framework中的作用域代理

發布時間:2023/12/3 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Framework中的作用域代理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Spring框架提供了Spring bean的作用域。

我們可以使用spring范圍控制插入Spring bean的各種依賴關系和配置值。

Spring支持以下六個范圍。 在基于Web的應用程序中可以使用六個中的四個:

范圍 描述
辛格爾頓 它是Spring框架中的默認范圍。 對于每個Spring IOC容器,將僅創建Bean的單個實例。
原型 每當從上下文請求bean時,每次都會創建一個新實例。
請求 Bean范圍到HttpServlet Request。 對于每個新請求,將創建一個新的bean實例。該實例僅適用于基于Web的應用程序。
屆會 將bean定義的作用域限定為Http會話,對于每個新會話,將返回該bean的新實例,僅在可識別Web的Spring應用程序上下文中有效。
應用 將Bean定義的作用域限定為ServletContext。 僅在可感知網絡的Spring應用程序上下文中有效。
網絡插座 將bean定義的范圍限定在WebSocket會話的生命周期內。 僅在可感知網絡的Spring應用程序上下文中有效。

Spring Framework提供了用于創建新范圍的接口。

1.將Bean視為依賴項

假設beanA具有單例作用域,而beanB具有原型作用域。 假設beanA具有beanB依賴性。 然后,無需使用任何其他配置,它就提供了隨機行為,因為beanA將具有該容器的單個實例,但是beanB將不會具有相同的行為。 每當從容器請求beanB時,都會創建一個新實例。

為了解決這些類型的問題, Java spring框架提供了稱為代理bean的概念。

對于范圍小于父級的依賴項,框架將創建代理而不是創建實際對象。 這些代理將擴展原始對象。

每當beanB中的方法被調用時,內部都會在代理對象上調用它,而不是在實際對象上調用它。 代理將嘗試根據作用域從上下文獲取對象,并將對其調用原始方法。
例如,SingletonScopedBean,PrototypeScopedBean是分別具有默認作用域和原型作用域的兩個bean。

public class SingletonScopedBean{ private PrototypeScopedBean prototypeScopedBean; public String getState(){return this.prototypeScopedBean.getState();} } Public class PrototypeScopedBean{private final String state; public String getState() {return state;} public void setState() {this.state = UUID.randomUUID().toString(); } }<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttps://www.springframework.org/schema/aop/spring-aop.xsd"> <bean id=”prototypeScopedBean” class=”org.example. PrototypeScopedBean” scope=”prototype” > <aop:scoped-proxy/> </bean> <bean id=”singletonScopedBean” class=”org.example. SingletonScopedBean”> <property name=”prototypeScopedBean” ref=”prototypeScopedBean”> </bean> </beans>

這將為prototypeScopedBean創建代理bean,并將代理作為依賴項附加到singletonScopedBean。

每當在prototypeScopedBean bean上調用getState()方法時,它將在proxy上調用該方法,并且proxy將解析prototypeScopedBean實例,并在已解析的對象上調用getState()方法。

2.可以通過兩種方式創建代理

  • 基于JDK的代理
  • 基于CGLIB(動態代理)的代理。

為了創建基于JDK的代理,必須在一個接口上實現該類。

對于基于CGLIB的代理,不存在此限制。

我們可以使用proxy-target-class屬性指定代理類型。 如果值為true,則將創建CGLIB代理。 如果該值為false,它將嘗試創建基于JDK的代理。

注釋方法: Spring框架提供@Scope注釋以指定范圍。 proxyMode是用于指定代理類型的注釋屬性。

@Component @Scope(value="prototype", proxyMode=ScopedProxyMode.TARGET_CLASS) public class PrototypeScopedBean{private final String state; public String getState() {return state;} public void setState() {this.state = UUID.randomUUID().toString(); } } @Component public class SingletonScopedBean{@Autowired private PrototypeScopedBean prototypeScopedBean;public String getState(){return this.prototypeScopedBean.getState();} }

通過上述更改,SingletonScopedBean將具有PrototypeScopedBean bean類型作為代理。

3. Spring的作用域代理-結論

我們學習了Spring bean作用域,以及如何在bean依賴項中注入各種作用域。 我們還學習了不同類型的代理模式。

翻譯自: https://www.javacodegeeks.com/scoped-proxy-in-spring-framework.html

總結

以上是生活随笔為你收集整理的Spring Framework中的作用域代理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。