Spring框架配置扩展

1.1    配置数据源

第7章使用Spring框架整合MyBatis框架后,我们把数据源的相关配置从MyBatis配置文件转移到了Spring配置文件中。在实际开发中,数据源还有一些其他配置方式。

1.1.1    使用properties文件配置数据源

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

示例1

jdbc.driver=com.mysql.cj.jdbc.Driver

jdbc.url=jdbc:mysql://127.0.0.1:3306/cvs_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai

jdbc.username=root

jdbc.password=123456

1.1.2    使用JNDI配置数据源

如果应用程序所部署的服务器(如Tomcat、WebLogic等)提供了数据源服务,应用程序也可以直接使用这些数据源。服务器数据源是使用JNDI方式,Spring框架为此专门提供了引用JNDI资源的JndiObjectFactoryBean类供开发者使用。若使用JNDI方式配置数据源,则需要把数据源信息配置到应用服务器上。以Tomcat为例,首先,需要把数据库驱动文件放到Tomcat的lib目录下;然后,把数据源信息配置到Tomcat的conf目录下的context.xml文件中,并修改Spring配置文件为通过JNDI方式配置数据源。具体配置信息如示例3所示。

示例3

<Context>

    <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&amp;characterEncoding=utf8&amp;serverTimezone=Asia/Shanghai"/>

</Context>

Spring配置文件:

<!-- 通过JNDI配置DataSource -->

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">

    <!-- 通过jndiName指定引用的JDNI数据源名称 -->

    <property name="jndiName">

        <value>java:comp/env/jdbc/cvs_db

    </property>

</bean>

<!-- 省略其他代码 -->

1.2    拆分Spring配置文件

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

1.3    Bean的自动装配

学习@Autowired或@Resource注解的时候同学们已经对Spring框架的自动装配功能有了一定的了解。Spring框架的自动装配是指在没有显式指定所依赖的Bean组件id的情况下,可以自动地将与属性类型相符的Bean注入相应属性的功能(对于@Resource注解而言,还会尝试id和属性名相符的情况),这在很大程度上简化了配置。Spring框架除支持注解方式的自动装配功能外,还支持使用XML配置文件方式实现Bean的自动装配。

1.4    Bean的作用域

1.4.1    什么是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。

singleton是默认的作用域,表示在默认情况下Spring框架为每个Bean仅创建一个实例,采用这种方式可以大大减少创建对象的开销,提高运行效率。但是,对于存在线程安全问题的组件,可以使用prototype作用域代替单例模式,关键代码如示例1所示。

示例1

<!-- 配置DAO -->

<bean id="sysUserMapper" class="com.bdqn.mapper.impl.SysUserMapperImpl" autowire="byType" scope="singleton"/>

<!-- 配置业务Bean -->

<bean id="sysUserService" class="com.bdqn.service.SysUserServiceImpl" autowire="byName" scope="prototype"/>

1.4.2    使用注解指定Bean的作用域

在当前的企业管理系统开发中,更多情况下是使用注解方式开发项目。使用注解方式配置Bean的作用域更加方便,代码如示例2所示。

示例2

import org.springframework.context.annotation.Scope;

/**

* 用户模块业务层实现

*/

@Scope("prototype")

@Service

public class SysUserServiceImpl implements SysUserService {

      ······   //业务代码略

}

本章总结

◎    数据库配置信息可以放在properties文件中单独维护。

◎    Spring框架可以使用PropertySourcesPlaceholderConfigurer加载properties文件,实现更灵活地数据源配置。

◎    Spring框架可以从服务器环境中获取JNDI资源。

◎    Spring框架提供了自动装配(autowire)功能,常用方式包括byName和byType。

◎    Spring框架支持同时使用多个配置文件,可以通过ClassPathXmlApplicationContext类的构造方法加载多个配置文件,也可以在配置文件中通过import标签引入其他配置文件。

◎    Spring框架中的Bean拥有singleton、prototype、request、session、global session等多种作用域,可以通过配置指定。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容