Spring框架(4)

配置数据源

使用properties文件配置数据源

使用properties文件配置数据源时,可以把数据源的相关配置信息单独放到properties文件中进行维护。

database.properties文件

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/cvs_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=123456

Spring框架提供了PropertiesSourcePlaceholderConfinurer类加载properties文件。在String配置文件中可以采用${xxx}的方式引用properties文件中的键值对数据。读取properties文件配置DataSource的代码如下

    <!-- 引入properties文件 -->
    <bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
        <property name="location" value="classpath:database.properties"/>
    </bean>
    <!--    使用properties文件配置数据源-->
    <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

使用JNDI配置数据源

如果应用程序所部署的服务器(如tomcat、WebLogic等)提供了数据源服务,应用程序也可以直接使用这些数据源。服务器数据源是使用JNDI方式,Spring框架为此专门提供了引用JNDI资源的JndiObjectFactoryBean类供开发者使用。

 若使用JNDI方式配置数据源,则需要把数据源信息配置到应用服务器上。以tomcat为例,首先,需要把数据库驱动文件放到Tomcat的lib目录下,然后,把数据源信息配置到Tomcat的conf目录下的context.xml文件中,并修改Spring配置文件为通过JNDI方式配置数据源。具体配置信息如下所示。

Tomcat中conf目录下的context.xml文件

	<Resource 
		name = "jdbc/cvs_db" 
		auth = "Container" 
		type = "javax.sql.DataSource" 
		maxTotal = "100" 
		maxIdle= "30" 
		maxWaitMillis = "10000" 
		username = "root" 
		password = "123456"
		driverClassName = "com.mysql.cj.jdbc.Driver" 
		url = "jdbc:mysql://127.0.0.1:3306/cvs_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai" 
		/>

Spring配置文件

<!--    使用JNDI配置数据源-->
    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName">
            <value>java:comp/env/jdbc/cvs_db</value>
        </property>
    </bean>

拆分Spring配置文件

如果使用XML配置文件的方式开发Spring项目,则当项目规模越来越大时,项目中的Bean也越来越多,配置文件将变得越来越臃肿,可读性和维护性都会降低;多人修改同一配置文件也容易发生冲突,影响开发效率。因此,Spring框架提供了可以将配置文件拆分处理的功能,可以将一个大的配置文件分解成多个小配置文件。

配置文件拆分完成之后,就需要创建Spring容器时加载这些文件。Spring框架的ClassPathXmlApplicationContext类提供了多种重载形式,便于从多个配置文件中读取配置信息。

public ClassPathXmlApplicationContext(String configLocation) throws BeansException {...}

public ClassPathXmlApplicationContext(String... configLocation) throws BeanException {...}

Bean的自动装配

在Bean标签中添加 autowire 属性,就可以根据对应的值进行多种装配方式

Spring框架提供了多种自动装配方式:

  • no:不使用自动装配。Bean的依赖、关系必须通过property元素定义。
  • byType:根据属性类型自动装配。BeanFactory查找容器中的全部Bean,如果正好有一个与依赖属性类型相同的Bean,则自动装配这个属性;如果有多个这样的Bean,则Spring将无法决定注入哪个Bean,会抛出一个致命异常;如果没有匹配的Bean,则什么都不会发生,属性不会被设置。
  • byName:根据属性名自动装配。BeanFactory查找容器中的全部Bean,找出id与属性的setter方法匹配的Bean。找到即自动注入,否则什么都不做。
  • constructor:与byType的方式类似,不同之处在于,它应用于构造器参数。如果在容器中没有找到与构造器参数类型一致的Bean,将会抛出异常。

Bean的作用域

在Spring框架中定义Bean,除可以创建Bean实例对Bean的属性进行注入外,还可以为所定义的Bean指定一个作用域,这个作用域的取值决定了Spring框架创建该组件实例的策略,进而影响程序的运行效率和数据安全。在Spring2.0之后的版本中,Bean的作用域被划分为以下五种

  • singleton:默认值。以单例模式创建Bean实例,即容器中该Bean的实例只会呗创建一个。
  • prototype:每次从容器中获取Bean是,都会创建一个新的实例。
  • request:用于Web应用环境,针对每次HTTP请求都会创建一个实例。
  • Session:用于Web应用环境,同一个会话共享同一个实例,不同的会话使用不同的实例。
  • global session:仅在Portlet的Web应用中使用,同一个全局会话共享一个实例。对于非Portlet环境,等同于session。

  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值