Bean のスコープは、Spring フレームワーク全体における Bean の特定の動作モードを指します。
たとえば、シングルトン スコープとは、Spring 全体で Bean のコピーが 1 つだけ存在し、それがグローバルに共有されることを意味し、他の人が値を変更すると、他の人が読み取るのは変更された値です。
##セッション: 応答スコープ
アプリケーション: グローバル スコープ
websocket: HTTP
# 注# 最後の 4 つの状態は Spring MVC の値であり、通常の Spring プロジェクトでは最初の 2 つだけです。
説明: IoC コンテナ内のこのスコープには、Bean のインスタンスが 1 つだけあります: Bean の取得 (つまり、applicationContext.getBean およびその他のメソッドを通じて取得)
application (理解)
説明: http servlet Context で、Bean インスタンスを定義します
websocket (理解)
説明: HTTP WebSocket のライフサイクルで、Bean インスタンスを定義します
シングルトン スコープ (シングルトン) VS グローバル スコープ (アプリケーション)
singleton は Spring Core のスコープ、application は Spring Web のスコープ
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)値を直接設定します:@Component public class UserBeans { @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) @Bean public User user1() { User user = new User(); user.setId(1); user.setName("Gujiu"); user.setPassword("123456"); return user; } }ログイン後にコピー
@Scope("prototype" )
@Component public class UserBeans { @Scope("prototype") @Bean public User user1() { User user = new User(); user.setId(1); user.setName("Gujiu"); user.setPassword("123456"); return user; } }
Bean
Bean を
##Bean
は必要な内容にアセンブルします。クラス (操作の取得)
Bean ライフ サイクル
Bean のインスタンス化 (JVM の「ロード」に相当し、ゼロから開始し、バイトコードをメモリに変換します。オブジェクト内のオブジェクトメモリが割り当てられているだけです) [ラフハウスを購入]
实现了各种 Aware 通知的方法,如 BeanNameAware、BeanFactoryAware、ApplicationContextAware 的接口方法 [打电话给各个装修的师傅]
执行 BeanPostProcessor 初始化前置方法 [师傅勘察环境, 指定装修方案 (前置工作)]
执行 @PostConstruct 初始化方法,依赖注入操作之后被执行 [两类装修师傅进行装修]
执行自己指定的 init-method 方法 (如果有指定的话) [两类装修师傅进行装修]
执行 BeanPostProcessor 初始化后置方法 [装修之后的清理工作]
使用 Bean [房子可以入住使用了]
销毁 Bean [卖掉房子]
BeanLifeComponent 类:
//@Component public class BeanLifeComponent implements BeanNameAware { @Override public void setBeanName(String s) { System.out.println("执行了通知"); } @PostConstruct public void postConstruct() { System.out.println("执行了 @PostConstruct"); } public void init() { System.out.println("执行了 init-method"); } @PreDestroy public void preDestroy() { System.out.println("执行了销毁方法"); } }
xml
配置:
<?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:content="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <bean id="myComponent" class="com.demo.component.BeanLifeComponent" init-method="init" ></bean> </beans>
调用类:
public class App2 { public static void main(String[] args) { ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml"); BeanLifeComponent beanLifeComponent = applicationContext.getBean("myComponent", BeanLifeComponent.class); System.out.println("使用Bean"); applicationContext.destroy(); } }
运行结果展示:
以上がSpring BeanのスコープとJavaのライフサイクルの詳細な分析とソースコード分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。