【使用SSM框架开发企业级应用】Spring配置补充
Spring配置补充
灵活配置DataSource
使用属性文件配置数据源
数据库连接信息写在属性文件中
采用PropertyPlaceholderConfigurer可以引入属性文件,在Spring配置文件中采用诸如${url}的方式引用属性值
<!-- 引入properties文件 -->
<bean class="org.springframework.beans.factory.config
.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:database.properties</value>
</property>
</bean>
${……}的前后不要键入空格,以免报错!
使用JNDI数据源
通过JNDI从服务器容器中获取DataSource资源
在服务器环境中配置数据源
在Spring配置文件引用JNDI资源
<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的作用域
作用域 |
说 明 |
singleton |
默认值。Spring以单例模式创建Bean的实例,即容器中该Bean的实例只有一个 |
prototype |
每次从容器中获取Bean时,都会创建一个新的实例 |
request |
用于Web应用环境,针对每次HTTP请求都会创建一个实例 |
session |
用于Web应用环境,同一个会话共享同一个实例,不同的会话使用不同的实例 |
global session |
仅在Portlet的Web应用中使用,同一个全局会话共享一个实例。对于非Portlet环境,等同于session |
singleton与prototype区别:
使用@Scope注解指定Bean的作用域
@Scope("prototype")
@Service("userService")
public class UserServiceImpl implements UserService {
// 省略其他代码}
Spring自动装配
什么是自动装配
<!-- 配置业务Bean并注入DAO实例 -->
<bean id="userService" class="cn.smbms.service.user.UserServiceImpl">
<property name="userMapper" ref="userMapper" />
</bean>
Spring可以根据属性类型、名称等自动进行注入
如何使用自动装配
设置<bean>元素的autowire属性
<!-- 配置业务Bean,根据属性名称自动装配 -->
<bean id="userService" class="cn.smbms.service.user.UserServiceImpl"
autowire="byName" />
Spring提供的4种自动装配类型
Autowirte属性值
取值 |
说明 |
no |
默认值。Spring 默认不进行自动装配,必须显式指定依赖对象 |
byName |
根据属性名自动装配。Spring 自动查找与属性名相同的id,如果找到,则自动注入,否则什么都不做 |
byType |
根据属性的类型自动装配。Spring 自动查找与属性类型相同的Bean,如果刚好找到唯一的那个,则自动注入;如果找到多个与属性类型相同的Bean,则抛出异常;如果没找到,就什么也不做 |
constructor |
和byType 类似,不过它针对构造方法。如果 Spring 找到一个Bean和构造方法的参数类型相匹配,则通过构造注入该依赖对象;如果找不到,将抛出异常 |
【注意】
自动装配使得配置文件可以非常简洁,但同时也造成组件之间的依赖关系不明确,容易引发一些潜在的错误,在实际项目中要谨慎使用
拆分配置文件
为什么需要拆分配置文件
项目规模变大,配置文件可读性、可维护性差
团队开发时,多人修改同一配置文件,易发生冲突
拆分策略
公用配置+每个系统模块一个单独配置文件(包含DAO、Service、Web控制器)
公用配置+DAO Bean配置+业务逻辑Bean配置+Web控制器配置
两种策略各有特色,适用于不同场合
拆分方法
利用ClassPathXmlApplicationContext 的重载方法可以配置多个配置文件,用逗号隔开或者使用通配符
Public ClassPathXmlApplicationContext( String configLocation );
public ClassPathXmlApplicationContext( String… configLocations );
以String[ ]方式传入多个配置文件名
- 使用PropertyPlaceholderConfigurer可以加载属性文件,实现更灵活的配置
- Spring可以从环境中获取JNDI资源
- Spring中配置Bean组件时,可以指定singleton、prototype、request、session、global、session几种不同的作用域,其中singleton是默认采用的作用域类型
- Spring提供了自动装配autowirte功能,常用方式包括byName和byType
配置多个配置文件,可以通过数组方式或使用通配符(*)加载,也可以在Spring主配置文件中使用使用
<import resource="xxx.xml"/>方式引入多个配置文件
内容就到这,
我是印书打总结的陈恰恰.77