Spring框架的主要功能:
1, Spring对项目中所有bean的管理
2, Spring 的事务的管理
3,Spring 提供的工具类
一 , 对项目中所有bean的管理
一,XML配置:
1,注册bean
直接注册bean,统一通过工厂bean产生,
2,注入bean
参数注入,属性注入,auto注册(协助),用p命名空间注入等
4,spring的事件处理
实现ApplicationListener接口的注册的bean可以自行处理事件。
如 ContextRefreshedEvent(刷新加载)等等
5,其它。不常用
还有如scope(Singleton(默认),Prototype,其它web的), alias bean别名,depends-on强制初始化,lazy-init延迟加载(即第一次加载文件不先加载该bean), Lookup方法注入(主要是针对单例)
二 注解:
1,注册bean
@Component,@Repository,@Service,@Controller 顾名思义按SPRING MVC理解 中立bean,service bean,controller bean,都可以注册bean,无区别
2,注入
@Autowired,@Resource,意义都一样 ,都是byType注入bean,如果需要byName 和 @Qualifier("beanName")连用
3,bean的生命周期,scope定义
@PostConstruct 与 @PreDestroy 一个初始化,一个销毁
@Scope("prototype") 里面是Scope范围
4,配置:
注解命名空间
加入:
xmlns:context="http://www.springframework.org/schema/context
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
<context:annotation-config/> 这样简化注册了所有注解需要的bean
<context:component-scan base-package="org.springTest.*"/> 里面要注册的包
用注解还是可以省略很多代码,特别是不会打扰写代码时的思路,搞的一会XML一会JAVA的... ...管理起来也方便
二 ,Spring 的事务的管理
① ,Spring事务的配置
1,配置dataSource
通过JNDI
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName"><value>java:comp/env/jdbc/cxps</value></property>
<property name="resourceRef" value="true"/>
</bean>
通过普通配置
<context:property-placeholder location="classpath:jdbc.properties" />
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${driverClassName}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<!-- 连接池启动时的初始值 -->
<property name="initialSize" value="${initialSize}" />
<!-- 连接池的最大值 -->
<property name="maxActive" value="${maxActive}" />
<!-- 最大空闲值 -->
<property name="maxIdle" value="${maxIdle}" />
<!-- 最小空闲值 -->
<property name="minIdle" value="${minIdle}" />
</bean>
这种配置资源文件jdbc.properties,当然也可以直接写上
2,配置操作的ORM框架或不进行配置直接用dataSource
比如配置hibernate框架
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.Oracle9Dialect
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/cxps/report/pojo/A.hbm.xml</value></list>
</property></bean>
配置JdbcTemplate支持
<bean id = "JdbcTemplate"
class = " org.springframework.jdbc.core.JdbcTemplate">
<property name = "dataSource">
<ref bean = "DataSource"/>
</property>
</bean>
</beans>
3,配置spring进行事务管理
hibernate的事务管理
<bean id="txManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
JdbcTemplate的事务管理直接管理jdbc就可以
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
②,Spring的事务属性
1,事务的传播性设置。 设置方法:
@Transactional(propagation=required)
----------默认的传播行为,指这个业务方法只能在事务中运行,如果调用它的bean有事务将会加入此事务中,那么它会创建一个新的事务运行。
@Transactional(propagation=not_supported)
---------- 指这个业务方法不支持事务,如果在有事务的bean中运行,运行到此业务方法时
事务会被挂起;
@Transactional(propagation=supports)
----------指这个业务方法如果在有业务方法中运行将支持事务,没有的话就不做事务处理
@Transactional(propagation=mandatory)
---------强制在有事务的bean中执行,否则抛出异常
@Transactional(propagation=Never)
---------和上面那个正好相反,在有事务的bean中执行将抛出异常
以上的事务传播属性其实和EJB中的意义是一样的
还一个NESTED,没细看
2.指定回滚异常
@Transactional(rollbackFor=Exception.class) 与 @Transactional(no-rollback-for=Exception.class)
默认的是抛出runtimeException,如果需要抛出其它的则需要指定
注:runtimeException一般指程序员的错误,比如数组越界,数据类型转换异常等,这类Spring称为unchecked
反之如非运行时异常为:IOException,fileCant'tfindException为普通的,这类异常必须catch;
3,事务隔离级别
主要要理解涉及到几个概念,都是指并发事务中
胀读:一个事务读取到另一个事务中未提交的更新数据
不可重复读:发生在同一个事务多次读取事务时,在第一次读取完时,刚刚好另一事务的提交数据,结果第二次读时读到了更新数据,导致两次读取结果不一样;
可重复读:和不可重复读一样,只不过第二次读取的数据结果一致,数据库形成镜像提供没更新前的数据,不受到另一事务影响
幻读:一个事务读取另一个事务已提交数据。
但这些都是由数据库控制的
4.其它设置
如:
readOnly=true,timeout等
三,Spring提供的工具类
1,资源文件,国际化,用类ResourceBundleMessageSource解析
<bean id="message" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="he"></property> //加载he.properties资源文件
</bean>
未完待续... ...