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

匿名 (未验证) 提交于 2019-12-02 23:49:02

在没有任何附加的条件下,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属性。就像下图的例子:

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

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!