Spring配置补充
灵活配置DataSource
实现Spring和MyBatis集成的过程中,我们学习了在Spring中配置数据源的方法。实际开发中数据源还有很多的配置方式可以选择。
使用属性文件配置数据源
之前的学习中我们了解了使用属性文件管理配置信息的优点.即将数据库连接信息写在属性文件中。使DataSource的可配置性更强.便于维护。Spring 也支持从属性文件中获取信息来进行数据源
配置。
使用Spring提供的PropertyPlaceholderConfigurer 类可以加载属性文件。在Spring配置文件中可以
采用…的方式引用属性文件中的键值对。读取属性文件配置DataSource的方法如下所示。
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:database.properties</value>
</property>
</bean>
<!-- 配置DataSource -->
<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>
database.properties属性文件内容如下所示:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/smbms?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
使用JNDI数据源
如果应用部署在高性能的应用服务器(如Tomcat, WebLogic等)上,我们可能更希望使用应用服务器本身提供的数据源。应用服务器的数据源使用JNDI方式供使用者调用, Spring为此专门提供引用JMDI资源的JndiObjectFactoryBean类。
使用AD的方式配置数据源,前提是必须在应用服务器上配置好数据源。我们以Tomcat为例配置数据源需要把数据库驱动文件放到Tomcat的lib目录下,并修改Tomcat的conf目录下的context.xml文件,配置数据源代码如下所示:
<Context>
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource name="jdbc/smbms" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000" username="root"
password="root" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/smbms?
useUnicode=true&characterEncoding=utf-8"/>
</Context>
< Resource >标签的name属性指定了数据源的名称,要与Spring配置文件中jndiName 值java:comp/env/后的名称要保存一致。Spring配置文件内容如下所示:
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<!--通过jndiName指定引用的JNDI数据源名称 -->
<property name="jndiName">
<value>java:comp/env/jdbc/smbms</value>
</property>
</bean>
Spring中Bean的作用域问题
理解Bean的作用域
在Spring中定义Bean,除了可以创建Bean实例并对Bean的属性进行注入外,还可以为所定义的Bean指定一个作用域。这个作用域的取值决定了Spring 创建该组件实例的策略.进而影响程序的
运行效率和数据安全。在Spring2.0及之后的版本中. Bean的作用域被划分为5种,如表8-1所示。
使用注解指定Bean的作用域
对于使用注解声明的Bean组件,如需修改其作用域,可以使用@Scope注解,关键代码如下所示:
Spring的自动装配
拆分Spring配置文件
对于使用XML方式进行配置的Spring项目,项目规模较大时,配置文件可读性,可维护性差,庞大的Spring配置文件难以阅读。此外,在进行团队开发时.多人修改同一配置文件容易发生冲突,降低开发效率。鉴于以上原因,对于使用XML方式进行配置的Spring项目,建议将一-个大的配置文件分解成多个小的配置文件,每个配置文件仅仅配置功能近似的Bean。
那么采用什么策略拆分Spring配置文件呢?
➢如果一个开发人员负责一个模块,我们采用公用配置(包含数据源、事务等) +每个系统模块一个单独配置文件(包含Dao、Service 及Web控制器)的形式。
➢如果开发是按照分层进行的分工, 我们采用公用配置(包含数据源、事务等) +DAO Bean 配置+业务逻辑Bean配置+Web控制器配置的形式。
两种拆分策略各有特色,适用于不同的场合。
拆分Spring配置文件,不仅可以分散配置文件.降低修改配置文件的难度和冲突的风险,而且
更符合”分而治之”的软件工程原理。