Spring框架学习(九):创建bean的模式、注入.properties文件的配置项


在没有任何附加的条件下,Spring创建对象的方式是单例模式,也就是说不管在什么地方注入多少次,使用的都是同一个bean。有时候这种模式并不能满足我们的需求。

@Scope注解可以声明创建bean的方式,以及bean的作用域。它可以与@Bean、@Component注解一起使用。看个例子:

    //ConfigurableBeanFactory.SCOPE_PROTOTYPE:原型模式,每次注入bean时都重新创建对象
    //ConfigurableBeanFactory.SCOPE_SINGLETON:单例模式,上下文中永远只有一个bean
    @Bean
    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
    Homework homework(){
        return new Homework("1+2 = ?");
    }

另外,在一些应用场景下,我们会希望bean是有作用范围的。比如说:购物车对象,每个用户都应该有属于自己的购物车,并且每次web会话中,购物车是不变的。对于一个用户来说,每个对购物车的添加、删除商品操作都是同一个购物车,而每个用户只能操作自己的购物车。

这就不得不提一下@Scope的另外的参数:WebApplicationContext.SCOPE_SESSION、WebApplicationContext.SCOPE_REQUEST。使用这两个值作为@Scope的参数,会创建出基于会话的bean、基于请求的bean。即每个会话创建一个bean、每个请求创建一个bean。当然了,对于web应用来说,光指定这个参数还不够还需要设置@Scope的proxyMode属性。就像下图的例子:

 

 关于这个proxyMode是什么作用,你可以查阅相关资料,或者翻看《Spring实战第四版》,这本书的链接:https://pan.baidu.com/s/1P9mV1PdHC1BhfHY9Dj3ngw 提取码:f9jo。使用xml配置方式也可以做scope相关设置。

 

你有没有想过将外部配置文件的字段注入到bean的属性里面?比如数据库信息。Spring为这提供了很好的实现方式:创建一个PropertySourcesPlaceholderConfigurer 类的bean,同时给它设定你的.properties文件的位置,就可以通过"${xxx.xxx}"占位符的方式访问了。对于这块如果看得有点迷糊,你可以在网上找一些例子,其实很简单,或者在评论区给我留言。

如果这篇文章有帮到你,欢迎收藏、关注、点赞。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM