zoukankan      html  css  js  c++  java
  • Spring总结 2.装配bean

    本随笔内容要点如下:

    • bean的作用域
    • 占位符

    一、bean的作用域

      在默认情况下,Spring管理的bean的单例的。也就是说,无论注入多少次,都是同一个bean对象。一般情况下,单例模式是足以应付大多数场景。

      Spring还提供了其他几个可选的作用域:

    • prototype:原型,每次从容器获取对象的时候都会创建一个新的bean
    • session:会话,用在Web应用中,为每一个会话都产生一个新bean
    • request:请求,同session
    • global session:与session类似,但是它只能在portlet的应用才能使用
    • application:为每个ServletContext创建一个bean。有点像singleton了,毕竟一个web应用只有一个ServletContext

      如果想改变bean的作用域的话,可以通过如下方式进行修改:

    <bean id="xxx" class="xxx" scope="singleton" />

      通过bean标签中的scope属性。如果是注解方式,那么可以使用注解@Scope

    @Scope("prototype")

    二、属性占位符

      在使用spring依赖注入时,我们时常会设置对象的属性。例如配置连接池:

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="xxx" />
        <property name="jdbcUrl" value="xxx" />
        <property name="user" value="xxx" />
        <property name="password" value="xxx" />
    </bean>

      像上述那样子写那么值就变成硬编码了。一般会将属性值该抽取出来形成一个文件,再通过spring提供的属性占位符功能来注入值:

    <context:property-placeholder location="classpath:db.properties"/>
    
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driverClass}" />
        <property name="jdbcUrl" value="${jdbc.url}" />
        <property name="user" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>

      如上,那么我们就只需要把信息写在db.properties文件。采用Java配置如下:

    @Configuration
    @PropertySource("classpath:db.properties")
    public class Config {
        @Autowired
        private Environment env;
        
        @Bean
        public DataSource dataSource() throws PropertyVetoException{
            ComboPooledDataSource dataSource = new ComboPooledDataSource();
            dataSource.setDriverClass(env.getProperty("jdbc.driverClass"));
            dataSource.setJdbcUrl(env.getProperty("jdbc.driverClass"));
            dataSource.setUser(env.getProperty("jdbc.driverClass"));
            dataSource.setPassword(env.getProperty("jdbc.driverClass"));
            return dataSource;
        } 
    }

      采用@PropertySource来引入配置文件,在代码里面,通过使用注入的Environment来获取要得到的属性。

  • 相关阅读:
    关于大型网站技术演进的思考(六)--存储的瓶颈(6)
    关于大型网站技术演进的思考(五)--存储的瓶颈(5)
    关于大型网站技术演进的思考(四)--存储的瓶颈(4)
    关于大型网站技术演进的思考(三)--存储的瓶颈(3)
    关于大型网站技术演进的思考(二)--存储的瓶颈(2)
    关于大型网站技术演进的思考(一)--存储的瓶颈(1)
    web前端工程师在移动互联网时代里的地位问题
    javascript技术难点(三)之this、new、apply和call详解
    谈谈javascript语法里一些难点问题(二)
    C#并行编程-Task
  • 原文地址:https://www.cnblogs.com/loading4/p/6316190.html
Copyright © 2011-2022 走看看