一、开始spring之旅

Spring是一个开源的控制反转(Inversion of Control ,IoC)和面向切面(AOP)的容器框架.它的主要目得是简化企业开发.

public class PersonServiceBean {private PersonDao personDao = new PersonDaoBean();public void save(Person person){personDao.save(person);}
}

PersonDaoBean 是在应用内部创建及维护的。所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。

依赖注入(Dependency Injection)

当我们把依赖对象交给外部容器负责创建,那么PersonServiceBean 类可以改成如下:

public class PersonServiceBean {private PersonDao personDao ;//通过构造器参数,让容器把创建好的依赖对象注入进PersonServiceBean,当然也可以使用setter方法进行注入。public PersonServiceBean(PersonDao personDao){this.personDao=personDao;}  public void save(Person person){personDao.save(person);}
}

所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中。

为何要使用Spring

至少在我看来,在项目中引入spring立即可以带来下面的好处

1.降低组件之间的耦合度,实现软件各层之间的解耦。
 
2.可以使用容器提供的众多服务,如:事务管理服务、消息服务等等。当我们使用容器管理事务时,开发人员就不再需要手工控制事务.也不需处理复杂的事务传播。
3.容器提供单例模式支持,开发人员不再需要自己编写实现代码。
4.容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能。
5.容器提供的众多辅作类,使用这些类能够加快应用的开发,如: JdbcTemplate、 HibernateTemplate。
6.Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts等,这样更便于应用的开发。

如果使用Spring, 我们就不再需要手工控制事务

另外,如果使用spring, 我们也不需要处理复杂的事务传播行为

public void payment(){Bean1.update();//更新金额Bean2.save();//记录操作日志
}

如果我们不使用Spring,针对下面这两种业务需求,我们该如何做?
第1种可能的业务需求:要求Bean1.update()和Bean2.save()在同一个事务中执行。
第2种可能的业务需求:要求不管Bean1.update() 的事务是否成功,都需要记录操作日志

public class Bean1 { public void update(){//注意:下面省略了一些代码Connection conn = null;conn.setAutoCommit(false);Statement.executeUpdate(“update account set amount=? where id=?");   }
}
public class Bean2 {public void save(){//注意:下面省略了一些代码Connection conn = null;conn.setAutoCommit(false);Statement.executeUpdate(“insert into Log (content) values (?)");}
}

使用Spring,不再需要我们处理复杂的事务传播行为
使用Spring,我们只需要通过声明式的事务属性配置就可以轻松地实现这两种业务需求
1.要求Bean1.update()和Bean2.save()的在同一个事务中执行
2.要求不管Bean1.update() 的事务是否成功,都需要记录日志。

@Transactional(propagation=Propagation.Required)
public void payment(){Bean1.update();//更新金额Bean2.save();//记录日志
}public class Bean1 {@Transactional(propagation=Propagation.Required)public void update(){executeUpdate(“update account set amount=? where id=?");     }
}
public class Bean2 {@Transactional(propagation=Propagation.RequiresNew)public void save(){executeUpdate(“insert into Log (content) values (?)");}
}

spring的配置文件模版

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd">.....
</beans>

该配置模版可以从spring的参考手册或spring的例子中得到。配置文件的取名可以任意,文件可以存放在任何目录下,但考虑到通用性,一般放在类路径下。

2011级-csdn-java-张侃—Spring(1)相关推荐

  1. 2011级-csdn-java-张侃—第十一周周报

    河软CSDN乐知学院 学员周学习总结 姓名 张侃 周次 11 方向 Java 内 容 本周学习知识点: EL表达式简介 面向对象的程序设计模式 自定义JSP标签 本周学习收获: EL表达式简介 EL表 ...

  2. java框架之Spring 核心框架体系结构

    很多人都在用spring开发java项目,但是配置maven依赖的时候并不能明确要配置哪些spring的jar,经常是胡乱添加一堆,编译或运行报错就继续配置jar依赖,导致spring依赖混乱,甚至下 ...

  3. java毕业设计基于spring框架的论坛网站项目设计和源码

    一.主题 榴莲社区--java开发基于spring框架的论坛网站,基于spring框架的论坛网站项目设计和项目 源 码 免 费下 载 链 接 如 下:  毕业设计项目基于spring框架的论坛网站源码 ...

  4. 详解蚂蚁金服 SOFAJRaft:生产级高性能 Java 实现

    SOFAStack(Scalable Open Financial Architecture Stack) 是蚂蚁金服自主研发的金融级分布式架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景 ...

  5. Aliyun Java Initializr 和 Spring 官方的到底有什么区别?

    来源 | 阿里巴巴云原生公众号 2020 年初,阿里云推出了自己的 Java 工程脚手架工具 – Aliyun Java Initializr.相信初看到这个产品时,同学们都会有相似的疑问:" ...

  6. 高级java知识结构图,Spring高级框架课程笔记 PDF 下载

    主要内容: Spring ⾼级框架(讲师:应癫) ssh = spring + struts + hibernate ssm = spring + springmvc + mybatis spring ...

  7. 阿里的26款大神级的Java开源项目

    1.分布式应用服务开发的一站式解决方案 Spring Cloud Alibaba Spring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案.此项目包含开发分布式应用服务的 ...

  8. 具有Spring Boot和Java配置的Spring Batch教程

    我一直在努力将Podcastpedia.org的一些批处理作业迁移到Spring Batch. 以前,这些工作是以我自己的方式开发的,我认为现在是时候使用一种更"标准化"的方法了. ...

  9. Java并发编程实战_阿里P9整理分享的亿级流量Java高并发与网络编程实战PDF

    前言 为了帮助初级开发者快速掌握高并发.网络编程.微服务.海量数据的处理这些实用技术,本文以"理论+范例"的形式对各个知识点进行了详细的讲解,力争让读者在实践中快速掌握相关知识. ...

  10. 浅谈2011年上半年Java游戏领域动态

    浅谈2011年上半年Java游戏领域动态 时间过得真快,转瞬已是 2011 年 6 月,仿佛都能听到 2012 正率领天启四骑士向我们快速冲锋的马蹄声了.所以趁着世界还没毁灭,我就先来谈谈 2011 ...

最新文章

  1. UA OPTI544 量子光学9 2-level system approximation的向量模型
  2. JAVA框架Struts2
  3. DCMTK:将DICOM文件的内容转换为XML格式
  4. CF938G Shortest Path Queries(线性基/线段树分治/异或)
  5. 一周学会HTML----Day03常用标签(下)
  6. ios 图片添加阴影
  7. TcxComboBox控件说明
  8. 苹果13英寸MacBook Pro有望下月更新 搭载M2芯片
  9. Vlan9.com论坛 2007-10-30精华技术文档
  10. Mixed Content: The page at ‘https://XXX’ was loaded over HTTPS, but requested an insecure...........
  11. java教程 pdf_java教程合集(25本)
  12. 黑苹果alc269声卡仿冒id_黑苹果定制声卡驱动(ALC892为例)
  13. 天正坐标标注怎么不显示_cad中坐标标注怎么显示不了xy的
  14. win10远程计算机管理,Win10专业版远程控制电脑有哪些方法?
  15. 小老弟研发之路面筋大汇总——关于C/C++(三)
  16. 【PTA-训练day6】L2-016 愿天下有情人都是失散多年的兄妹+ L1-011 帅到没朋友
  17. 医学统计学中RR、OR和HR三个关于比值的概念
  18. 计算机考研自我介绍大概多少字,1分钟自我介绍多少字
  19. On release of batch it still contained JDBC statements
  20. 20220109训练-腿

热门文章

  1. 决策树实例load_wine数据集
  2. UnicodeEncodeError: ‘gbk‘ codec can‘t encode character ‘\xee‘ in position 71: illegal multibyte sequ
  3. java 猜数字游戏
  4. 龙尚U9507 4G模块调试小结
  5. php网站制作成品欣赏,phpweb成品网站产品展示模块功能简介
  6. 目标检测论文:FoveaBox: Beyond Anchor-based Object Detector及其PyTorch实现
  7. 英睿达内存条正品鉴别教程(镁光颗粒)
  8. Proteus8 破解版+汉化版
  9. 意云丰团队:有效任务已达6000多个,感谢大家的支持
  10. 金融行业营改增:从战略到战术的攻坚战