导入
Bean 作用域
了解单例(singleton)和原型(prototype)Bean作用域之间的区别以及如何实现它们。
...
Bean作用域类型
1package io.datajek.spring.basics.movierecommendersystem.lesson8; 2 3import org.springframework.boot.SpringApplication; 4import org.springframework.boot.autoconfigure.SpringBootApplication; 5import org.springframework.context.ApplicationContext; 6 7@SpringBootApplication 8public class MovieRecommenderSystemApplication { 9 10 public static void main(String[] args) { 11 12 // ApplicationContext 管理 Bean 及其依赖关系 13 ApplicationContext appContext = SpringApplication.run(MovieRecommenderSystemApplication.class, args); 14 15 // 从应用上下文中三次获取单例 Bean 16 ContentBasedFilter cbf1 = appContext.getBean(ContentBasedFilter.class); 17 ContentBasedFilter cbf2 = appContext.getBean(ContentBasedFilter.class); 18 ContentBasedFilter cbf3 = appContext.getBean(ContentBasedFilter.class); 19 20 System.out.println(cbf1); 21 System.out.println(cbf2); 22 System.out.println(cbf3); 23 } 24}
...
单例作用域
声明原型作用域的两种方法
1// 方法一 2@Scope("prototype") 3 4// 方法二 5@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
应用上下文在 main() 方法中管理 Bean 和依赖关系
1public static void main(String[] args) { 2 // ApplicationContext 管理 Bean 及其依赖关系 3 ApplicationContext appContext = SpringApplication.run(MovieRecommenderSystemApplication.class, args); 4 5 // ... 6 7 // 从应用上下文中三次获取原型 Bean 8 CollaborativeFilter cf1 = appContext.getBean(CollaborativeFilter.class); 9 CollaborativeFilter cf2 = appContext.getBean(CollaborativeFilter.class); 10 CollaborativeFilter cf3 = appContext.getBean(CollaborativeFilter.class); 11 12 System.out.println(cf1); 13 System.out.println(cf2); 14 System.out.println(cf3); 15}
这次,应用上下文将返回三个不同的对象。每次调用 getBean() 方法时,都会创建一个新的实例。
...
原型作用域
1package io.datajek.spring.basics.movierecommendersystem.lesson8; 2 3import org.springframework.boot.SpringApplication; 4import org.springframework.boot.autoconfigure.SpringBootApplication; 5import org.springframework.context.ApplicationContext; 6 7@SpringBootApplication 8public class MovieRecommenderSystemApplication { 9 10 public static void main(String[] args) { 11 12 // ApplicationContext 管理 Bean 及其依赖关系 13 ApplicationContext appContext = SpringApplication.run(MovieRecommenderSystemApplication.class, args); 14 15 // 从应用上下文中三次获取原型 Bean 16 CollaborativeFilter cf1 = appContext.getBean(CollaborativeFilter.class); 17 CollaborativeFilter cf2 = appContext.getBean(CollaborativeFilter.class); 18 CollaborativeFilter cf3 = appContext.getBean(CollaborativeFilter.class); 19 20 System.out.println(cf1); 21 System.out.println(cf2); 22 System.out.println(cf3); 23 } 24}
1package io.datajek.spring.basics.movierecommendersystem.lesson8; 2 3import org.springframework.boot.SpringApplication; 4import org.springframework.boot.autoconfigure.SpringBootApplication; 5import org.springframework.context.ApplicationContext; 6 7@SpringBootApplication 8public class MovieRecommenderSystemApplication { 9 10 public static void main(String[] args) { 11 12 // ApplicationContext 管理 Bean 及其依赖关系 13 ApplicationContext appContext = SpringApplication.run(MovieRecommenderSystemApplication.class, args); 14 15 // 从应用上下文中三次获取单例 Bean 16 // ContentBasedFilter cbf1 = appContext.getBean(ContentBasedFilter.class); 17 // ContentBasedFilter cbf2 = appContext.getBean(ContentBasedFilter.class); 18 // ContentBasedFilter cbf3 = appContext.getBean(ContentBasedFilter.class); 19 20 // 从应用上下文中三次获取原型 Bean 21 // CollaborativeFilter cf1 = appContext.getBean(CollaborativeFilter.class); 22 // CollaborativeFilter cf2 = appContext.getBean(CollaborativeFilter.class); 23 // CollaborativeFilter cf3 = appContext.getBean(CollaborativeFilter.class); 24 } 25}