首页 > 编程语言 > 详细

Spring 笔记

时间:2016-04-09 12:15:34      阅读:320      评论:0      收藏:0      [点我收藏+]

1. Spring的依赖注入

控制反转(IoC)是一个通用的概念,它可以用许多不同的方式去表达,依赖注入仅仅是控制反转的一个具体的例子。
当编写一个复杂的 Java 应用程序时,应用程序类应该尽可能的独立于其他的 Java 类来增加这些类可重用额可能性,当进行单元测试时,可以使它们独立于其他类进行测试。依赖注入(或者有时被称为配线)有助于将这些类粘合在一起,并且在同一时间让它们保持独立。
到底什么是依赖注入?让我们将这两个词分开来看一看。这里将依赖关系部分转化为两个类之间的关联。例如,类 A 依赖于类 B。现在,让我们看一看第二部分,注入。所有这一切都意味着类 B 将通过 IoC 被注入到类A 中。

  • 显示装配Bean,这需要写许多xml代码
  • 基于注解的装配:使用@Autowired直接标注属性等,就可以自动装配Bean。如果想要自动扫描检测类并检测定义Bean,就要在xml加上<context:component-scan base-package="com.xx"/>。除此之外,还需要给类标上注解:@Controller,@Repository,@Service等。(Bean ID默认为类名)

2. Spring Aop

Spring 框架的一个关键组件是 面向方面的编程(AOP)框架。面向方面的编程需要把程序逻辑分解成不同的部分称
为所谓的关注点。跨一个应用程序的多个点的功能被称为 横切关注点,这些横切关注点在概念上独立于应用程序
的业务逻辑。有各种各样的常见的很好的方面的例子,如日志记录、审计、声明式事务、安全性和缓存等。

2.1 Spring Aop术语

技术分享

2.2 Spring Aop有2种实现方式:

  • 使用常规类以及基于配置的 XML 来实现的
  1. <aop:config>
  2. 声明一个方面
  3. <aop:aspect id="myAspect" ref="aBean">
  4. 声明切入点
  5. <aop:pointcut id="businessService"
  6. expression="execution(* com.xyz.myapp.service.*.*(..))"/>
  7. 声明切入的通知(前置 后置 环绕等)
  8. <!-- a before advice definition -->
  9. <aop:before pointcut-ref="businessService"
  10. method="doRequiredTask"/>
  11. <!-- an after advice definition -->
  12. <aop:after pointcut-ref="businessService"
  13. method="doRequiredTask"/>
  14. </aop:aspect>
  15. </aop:config>
  16. <bean id="aBean" class="...">
  17. ...
  18. </bean>
  • 使用常规类以及基于注解来实现的

2.1 Spring Aop & Log4j 实现流程

3. Spring事务管理

事务的概念可以描述为具有以下四个关键属性 ACID:

  • 原子性:事务应该当作一个单独单元的操作,这意味着整个序列操作要么是成功,要么是失败的。
  • 一致性:这表示数据库的引用完整性的一致性,表中唯一的主键等。
  • 隔离性:可能同时处理很多有相同的数据集的事务,每个事务应该与其他事务隔离,以防止数据损坏。
  • 持久性:一个事务一旦完成全部操作后,这个事务的结果必须是永久性的,不能因系统故障而从数据库中删
    除。

3.1 局部事务 vs. 全局事务

局部事务是特定于一个单一的事务资源,如一个 JDBC 连接,而全局事务可以跨多个事务资源事务,如在一个分布式系统中的事务。

3.2 声明式事务管理

声明式事务管理可以使用 AOP 方法进行模块化

  1. <tx:advice id="txAdvice" transaction-manager="transactionManager">
  2. <tx:attributes>
  3. <tx:method name="create"/>
  4. </tx:attributes>
  5. </tx:advice>
  6. <aop:config>
  7. <aop:pointcut id="createOperation"
  8. expression="execution(*com.tutorialspoint.StudentJDBCTemplate.create(..))"/>
  9. <aop:advisor advice-ref="txAdvice" pointcut-ref="createOperation"/>
  10. </aop:config>
  11. <!-- Initialization for TransactionManager -->
  12. <bean id="transactionManager"
  13. class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  14. <property name="dataSource" ref="dataSource" />
  15. </bean>
  16. <!-- Definition for studentJDBCTemplate bean -->
  17. <bean id="studentJDBCTemplate"
  18. class="com.tutorialspoint.StudentJDBCTemplate">
  19. <property name="dataSource" ref="dataSource" />
  20. </bean>

但是可以更简化

  1. <!-- 注解驱动事务管理-->
  2. <tx:annotation-driven transaction-manager="txManager"/>

添加后Spring检查上下文所有的Bean,找出使用注解@Transactional的Bean,tx:annotation-driven自动为之添加事务,事务的属性通过来@Transactional的参数定义的





Spring 笔记

原文:http://www.cnblogs.com/hmaccelerate/p/5371158.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!