Spring 笔记

###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 来实现的
<aop:config>
声明一个方面
<aop:aspect id="myAspect" ref="aBean">
声明切入点
<aop:pointcut id="businessService"
expression="execution(* com.xyz.myapp.service.*.*(..))"/>
声明切入的通知(前置 后置 环绕等)
<!-- a before advice definition -->
<aop:before pointcut-ref="businessService"
method="doRequiredTask"/>
<!-- an after advice definition -->
<aop:after pointcut-ref="businessService"
method="doRequiredTask"/>
</aop:aspect>
</aop:config>
<bean id="aBean" class="...">
...
</bean>
  • 使用常规类以及基于注解来实现的 ####2.1 Spring Aop & Log4j 实现流程

###3. Spring事务管理 事务的概念可以描述为具有以下四个关键属性 ACID:

  • 原子性:事务应该当作一个单独单元的操作,这意味着整个序列操作要么是成功,要么是失败的。
  • 一致性:这表示数据库的引用完整性的一致性,表中唯一的主键等。
  • 隔离性:可能同时处理很多有相同的数据集的事务,每个事务应该与其他事务隔离,以防止数据损坏。
  • 持久性:一个事务一旦完成全部操作后,这个事务的结果必须是永久性的,不能因系统故障而从数据库中删 除。 ####3.1 局部事务 vs. 全局事务 局部事务是特定于一个单一的事务资源,如一个 JDBC 连接,而全局事务可以跨多个事务资源事务,如在一个分布式系统中的事务。 ####3.2 声明式事务管理 声明式事务管理可以使用 AOP 方法进行模块化
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="create"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="createOperation"
expression="execution(*com.tutorialspoint.StudentJDBCTemplate.create(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="createOperation"/>
</aop:config>
<!-- Initialization for TransactionManager -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- Definition for studentJDBCTemplate bean -->
<bean id="studentJDBCTemplate"
class="com.tutorialspoint.StudentJDBCTemplate">
<property name="dataSource" ref="dataSource" />
</bean>

但是可以更简化

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

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

转载于:https://my.oschina.net/hmaccelerate/blog/655735

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值