Spring的Bean作用域 --《Spring In Action》
2021-03-30 21:27
标签:委托 外部 src 遇到的问题 存在 The default prope 有用 在默认情况下,Spring App上下文中所有Bean都是单例(singleton)的形式创建。不管给定的一个bean被注入多少次,每次所注入的都是同一个实例。 在Web应用中,如电子商务应用中的购物车Bean如果是单例的话会导致所有用户都会向一个购物车中添加商品。另一个方面如果购物车是原型作用域在应用中其他的地方不会出现造成资源浪费。 Spring的Environment中存在四种getProperty()重载的变种形式 Spring的Bean作用域 --《Spring In Action》 标签:委托 外部 src 遇到的问题 存在 The default prope 有用 原文地址:https://www.cnblogs.com/openmind-ink/p/13574533.html
Bean 作用域
如何指定Bean的作用域
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public Notepad notepad(){
return new Notepad();
}
使用会话和请求作用域
@Component
@Scope(value=WebApplicationContext.SCOPE_SESSION, proxyMode=ScopedProxyMode.INTERFACES)
public ShoppingCart cart(){...}
// value=WebApplicationContext.SCOPE_SESSION : 表明Spring为Web应用中的每个会话创建一个ShoppingCart
// proxyMode=ScopedProxyMode.INTERFACES : 表明解决了将会话或请求作用域的bean注入到单例Bean中所遇到的问题
proxyMode=ScopedProxyMode.INTERFACES;
表明这个代理要实现ShoppingCart接口,并将调用委托给实现bean。如果Bean的类型就是具体类而不是接口则需要改变属性值proxyMode=ScopedProxyMode.TARGET_CLASS
来表明要以生成目标类扩展的方式创建代理。
作用域代理能够延迟注入请求和会话作用域的Bean
实现运行时注入
//- Java中
@Bean
public CompactDisc sgtPeppers(){
return new BlankDisc("Sgt, Pepper‘s Lonely", "The Beatles");
}
// - XML中
Spring提供两种运行时注入值的方式
注入外部值
@Configuration
@PropertySource("classpath:/com/soundsystem/app.properties") // 声明属性源
public class BlankDisc{
@Autowired
Environment env;
@Bean
public BlankDisc disc(){
return new BlankDisc(env.getProperty("disc.title"),env.getProperty("disc.artist")); // 检索属性值
}
}
/**app.properties
disc.title="xxx"
disc.artist="xxx"
*/
属性占位符(Property placeholder)
// XML 设置
上一篇:Python3 基本数据类型
文章标题:Spring的Bean作用域 --《Spring In Action》
文章链接:http://soscw.com/index.php/essay/70164.html