控制反转(IoC)是一个通用的概念,它可以用许多不同的方式去表达,依赖注入仅仅是控制反转的一个具体的例子。
当编写一个复杂的 Java 应用程序时,应用程序类应该尽可能的独立于其他的 Java 类来增加这些类可重用额可能性,当进行单元测试时,可以使它们独立于其他类进行测试。依赖注入(或者有时被称为配线)有助于将这些类粘合在一起,并且在同一时间让它们保持独立。
到底什么是依赖注入?让我们将这两个词分开来看一看。这里将依赖关系部分转化为两个类之间的关联。例如,类 A 依赖于类 B。现在,让我们看一看第二部分,注入。所有这一切都意味着类 B 将通过 IoC 被注入到类A 中。
<context:component-scan base-package="com.xx"/>
。除此之外,还需要给类标上注解:@Controller,@Repository,@Service等。(Bean ID默认为类名)Spring 框架的一个关键组件是 面向方面的编程(AOP)框架。面向方面的编程需要把程序逻辑分解成不同的部分称
为所谓的关注点。跨一个应用程序的多个点的功能被称为 横切关注点,这些横切关注点在概念上独立于应用程序
的业务逻辑。有各种各样的常见的很好的方面的例子,如日志记录、审计、声明式事务、安全性和缓存等。
<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>
事务的概念可以描述为具有以下四个关键属性 ACID:
局部事务是特定于一个单一的事务资源,如一个 JDBC 连接,而全局事务可以跨多个事务资源事务,如在一个分布式系统中的事务。
声明式事务管理可以使用 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的参数定义的
原文:http://www.cnblogs.com/hmaccelerate/p/5371158.html