/*
* 1.spring是一个开源的控制反转(ioc)和面向切面(aop)的容器框架,他的主要目的是简化企业开发。
*
* 控制反转
*
* 应用层bean public class PersonServiceBean{ private PersonDao personDao = new
* PersonDaoBean();//dao层bean prublic void save(Person person){
* personDao.save(person) } }
*
* PersonDaoBean 是在应用内部创建及维护的。
*
* 所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。
* 这样控制权就由应用转到了外部容器,控制权的转移就是所谓的反转。
*
* 依赖注入
*
*
* 通过构造函数,外部容器将依赖对象注入到组件当中,当然也可以使用set方法 public class PersonServiceBean{
* this.PersonDao = personDao;
* }
*
* public void save(){ personDao.save(); }
*
* 所谓依赖注入就是程序运行中,容器动态的将依赖对象注入到组件当中。
*
* 为何要使用Spring
* 1.降低组件之间的耦合,实现软件之间的解耦。--前面第一个例子耦合度就很高,要是不给依赖对象的话,编译都过不去。
* control-->service-->dao
* 2.可以使用容器提供的众多服务,如事务管理服务,消息服务等,当我们使用容器管理事务时,开发人员就不再需要手工控制事务,也不需要处理复杂的事务传播。
* Hibernate的事务操作
* public void save(){
* Session session = SessionFactory.getCurrentSession();
* session.beginTransaction();//spring 可以帮做
* ..............
* session.getTransaction().commit();//spring 可以帮做
* }
* Jdbc 的事务操作
* Connection conn = null;
* conn.setAutoCommit(false);//spring 可以帮做
* conn.commit();//spring 可以帮做
*
* 另外使用spring,我们也不需要处理复杂的事务传播行为
* public void payment(){
* Bean1.update();//更新金额
* Bean2.save();//记录操作日志
* }
* public class Bean1{
* public void update(){
* Connection conn = null;
* conn.setAutoCommit(false);
* Statement.executeUpdate('update ....');
* }
* }
* public class Bean2{
* public void save(){
* Connection conn = null;
* conn.setAutoCommit(false);
* Statement.executeUpdate('insert into ....');
* }
* }
* 如果不是用spring下面操作该如何实现?
* 1.要求Bean1.update()和Bean2.save()在同一个事务中执行。
* 2.要求不管Bean1.update()是否成功,都要记录操作日志。
*
*1.的实现方法使用同一个Connection
* public void payment(){
* Connection conn = null;
* conn.setAutoCommit(false);
* Bean1.update(conn);//更新金额
* Bean2.save(conn);//记录操作日志
* }
* public class Bean1{
* public void update(Connection conn){
* Statement.executeUpdate('update ....');
* }
* }
* public class Bean2{
* public void save(Connection conn){
* Statement.executeUpdate('insert into ....');
* }
* }
*
* 2的实现就用前面的,开两个连接,放在连个事务当中。
*
* 使用spring的话
* @Transactionl(propagation=Propagation.Required)
* public void payment(){
* Bean1.update();//更新金额
* Bean2.save();//记录操作日志
* }
* public class Bean1{
* @Transactionl(propagation=Propagation.Required)
* public void update(){
* Connection conn = null;
* conn.setAutoCommit(false);
* Statement.executeUpdate('update ....');
* }
* }
* public class Bean2{
* @Transactionl(propagation=Propagation.Required)使用同一个事务 如果实现2可以改为@Transactionl(propagation=Propagation.RequiresNew),这样就会在两个事务当中
* public void save(){
* Connection conn = null;
* conn.setAutoCommit(false);
* Statement.executeUpdate('insert into ....');
* }
* }
*
* 3.容器提供单例模式支持,开发人员不需自己编写实现代码。
* 4.容器提供了AOP技术,利用它实现权限拦截,运行期监控等功能。
* 5.容器提供众多辅助类,使用这些类能够加快应用的开发,如:JdbcTemplate,HibernateTemplate
* 6.Spring对于主流的应哟你框架提供了集成支持,如:Hibernate,JPA,Struts这样便于应用的开发。
*/
spring2.5.6学习笔记一:spring简介
最新推荐文章于 2024-10-16 10:11:07 发布