Spring的扩展

Spring的扩展的知识点

  1. Bean的作用域
  2. Spring的自动装配
  3. 拆分Spring的配置文件

Bean的作用域

当通过spring容器创建一个Bean的实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域。

Spring支持如下5中作用域

  1. Singleton:单例作用域,是Spring容器默认的作用域。在整个Spring Ioc容器中,使用Singleton定义的Bean将只有一个实例。单例模式一般适用于那些无会话状态的Bean (比如辅助工具类、Dao组件、业务逻辑组件等等)
  2. prototype:原型模式,每次通过容器的getBean()方法获取prototype定义的Bean时,都会创建一个新的实例。
  3. request:对于每次HTTP请求,使用request定义的Bean都会产生一个新的实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效
  4. session:对于每次HTTP Session,使用session定义的Bean都将产生一个新的实例,同一个会话共享同一个实例,不同的会话使用不同的实例,同样只有在Web应用中使用Spring时,该作用于才会生效。
  5. globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效

reqest、session、globalsession仅在基于web的spring ApplicationContext情形下才有效

Spring的自动装配

什么是自动装配
设置注入和构造注入有时在做配置时比较麻烦,为了提高开发效率,提供了自动转装配功能,简化配置。
Spring框架是默认不支持自动装配的,想要使用自动装配需要修改spring配置文件中标签的autowire属性

设置注入

	<!-- 配置Service层   设置注入 -->
	<bean id="userService" class="cn.smbms.service.UserServiceImpl">
		<property name="userMapper" ref="userMapper" />
	</bean>

自动装配

	<!-- 配置业务Bean 根据属性名称自动装配 -->
	<bean id="userService" class="cn.smbms.service.UserServiceImpl" 
		autowire="byName"/>

Spring提供的自动装配的类型

  1. no
    默认值。Spring默认不进行自动装配,必须显示依赖对象。
  2. byname
    根据属性名自动装配。Spring自动查找与属性名相同的id,如果找到,则自动注入,否则什么都不做。
  3. byType
    根据属性的类型自动装配。Spring自动查找与属性类型相同的Bean,如果刚好找到唯一的哪个,则自动注入;如果找到多个与属性类型相同的Bean,则抛出异常;如果没找到就什么也不做。
  4. consturctor
    和byname类似,不过它针对构造方法。如果Spring找到一个Bean和构造方法的参数类型相匹配,则通过构造注入该依赖对象;如果找不到,将抛出异常。

注意
每个Bean都需要设置autowire属性,较繁琐。可以为 beans 元素设置default-autowire属性,影响全局

拆分Spring的配置文件

为什么要拆分配置文件
项目规模变大。配置文件可读性、可维护性差
团队开发时,多人修改同一配置文件,易发生冲突

拆分策略
公用配置+每个系统模块一个单独配置文件(包含DAO、Service、Web控制器)
公用配置+DAO Bean配置+业务逻辑Bean配置+Web控制器配置

两种策略各有特色,适用于不同的场合

引用拆分后的配置文件的两种放方法

  1. 利用ClassPathXmlAoolicationContext的重载方法可以配置多个配置文件,用逗号隔开或者使用通配符。
//方法一
ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml",	
							     			"ApplicationContext-dao.xml",
											"ApplicationContext-service.xml");
  1. 使用<import resource="xxx.xml>方式
//方法二
ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");

配置数据源的方式
一、 数据库连接信息直接写入数据源

ApplicationContext.xml

//配置数据源
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
		<property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
		<property name="url" value="jdbc:mysql://localhost:3306/smbms?useUnicode=true&amp;characterEncoding=utf-8"/> 
		<property name="username" value="root"/> 
		<property name="password" value="root"/> 
</bean>

二、 数据库连接信息写入属性文件中

属性文件database.propetiesr

//属性文件database.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf-8
username=root
password=root

ApplicationContext.xml

<!-- 引入propertirs文件 PropertyPlaceholderConfigurer可以引用属性文件,在Spring配置文件中采用诸如${url}的方式引用属性值 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location">
			<value>classpath:database.properties</value>
		</property>
</bean>

<!-- dbcp方式配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
		<property name="driverClassName" value="${driver}"/> 
		<property name="url" value="${url}"/> 
		<property name="username" value="${username}"/> 
		<property name="password" value="${password}"/> 
</bean>

三、JNDI配置数据源

配置apache-tomcat-7.0.57/conf/context.xml

 <!-- maxActive最大的活动数 maxIdle最大闲置数-->
 <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://localhost:3306/smbms?useUnicode=true&amp;characterEncoding=utf-8"/>

ApplicationContext.xml

<!-- JNDI方式配置数据源 -->
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
		<property name="jndiName">
			<value>java:comp/env/jdbc/smbms</value>
		</property>
</bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值