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的参数定义的

浙公网安备 33010602011771号