一、多种方式配置数据源
1、通过引入自定义properties属性文件的方式,可使DataSource的可配置性更强,更便于维护。如下就是经常使用的jdbc.properties,用来配置连接mysql。
driverClassName=com.mysql.jdbc.Driver
validationQuery=SELECT 1
jdbc_url=jdbc:mysql://localhost:3306/work_attendance?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
jdbc_username=root
......
注意:properties文件中“=”号前后一般不加空格,还有“=”号后面不加“”号,比如validationQuery=“SELECT 1”是错误的。
引用jdbc.properties 的两种方式书写如下(个人喜欢第二种):
<!-- 01.让Spring去寻找jdbc.properties -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties"></property>
</bean>
<!-- 02.让Spring去寻找jdbc.properties -->
<context:property-placeholder location="classpath:jdb.properties"/>
2、通过spring对JNDI数据源的支持,当我们使用应用服务器本身提供的数据源就派上用场了,因为应用服务器的数据源是使用JNDI方式供使用者调用。
JNDI是什么?
JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一,JNDI避免了程序与数据库之间的紧耦合,使应用更加易于配置、易于部署。关于JNDI的详解请看这里。
二、Bean的五个作用域
在Spring中除了定义bean、创建bean、注入属性到bean等,还可以为定义的bean指定一个作用域,这个作用域的取值决定了spring创建该组件实例的策略,从而影响程序的运行效率和数据安全。
作用域 | 说明 |
---|---|
singleton | 默认值。以单例模式创建Bean的实例,即容器中该Bean的实例只有一个 |
prototype | 每次从容器中获取Bean时,都会创建一个新的实例 |
request | 用于web应用环境,针对每次HTTP请求都会创建一个实例 |
session | 用于web应用环境,同一个会话共享同一个实例,不同会话使用不同实例 |
global session | 仅在Portlet的web应用中使用,同一个全局会话共享一个实例。对应非Portlet环境,等同于session |
具体使用如下:
<bean id="..." class="..." scope="prototype">
......
</bean>
另外,曾经提到@Autowired注解可以实现自动装配属性,而基于XML配置Spring的方式也可以实现自动装配,即在XML配置文件中,通过<bean>元素的autowire属性可以实现自动装配。但是当Bean多了起来的时候,配置起来也会很繁琐,所以我们可以设置全局自动装配,简化维护单个Bean的注入方式。
autowire属性值 | 说明 |
---|---|
no | 不使用自动装配 |
byType | 通过属性类型自动装配 |
byName | 通过属性名自动装配 |
constructor | 与byType类似,不同之处在于它应用于构造器参数 |
tips:对于大型应用,不鼓励使用自动装配,因为虽减少了配置工作量,但却降低了依赖关系的清晰性。
三、配置文件的拆分策略和拆分方法
当项目规模比较大时,庞大的Spring配置文件就显得可读性和可维护性差了一些,于是我们可以把配置文件进行分解,每个配置文件仅仅配置功能近似的Bean。
两种拆分策略:
- 1、若一个开发人员负责一模块,则采用公用配置(包含数据源、事务)+每个系统模块一个单独配置文件(包含dao、service、web控制器)的形式。
- 2、若开发是按分层分工的,则采用公用配置(包含数据源、事务)+daobean配置+业务逻辑bean配置+web控制器配置的形式。
拆分后如何组合起多个配置文件?如下:
//方式一,逐个加载进来
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml",
"applicationContext-dao.xml",
"applicationContext-service.xml");
......
//方式二,采用通配符*匹配一定规律的命名规则的配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext*.xml");
......
//方式三,可通过在一个xml文件中import其他xml文件组合起来。
比如在applicationContext.xml配置文件中
<import resouce="applicationContext-dao.xml" />
这样就把applicationContext-dao.xml和applicationContext.xml组合起来了。
网友评论