spring ioc aop 事务

Spring知识点

IOC相关

ioc注解模式需要在配置文件中增加
<context:component-scan base-packege="包名"> <context:component>
1.如果spring容器中两个组件有调用关系,使用如下注解:
@Resource
2.默认按照类型匹配,如果容日中有多个符合要求的bean对象,优先使用属性名相同的bean对象,也可以通过@Resource(name="需要注入的bean的1id")指定
@Autowired默认按照类型匹配,如果需要指定bean的名称,可以通过@Qualifier("需要注入的bean的id值")来指定

properties常量数据注入

1.在spring配置文件中加载properties文件数据
<util:properties id="constant" location="classpath:constant,properties"></util:perproties>
2.在javaBean组件中使用spring表达式来获取
@Value("#{constant.name}")
private int name

AOP相关注解

 开启aop注解,一对多的调用关系
 1.在spring配置文件中启用aop注解
 <aop:aspect-autoproxy> </aop:aspect-autoproxy> 
 2.在javaBean中使用以下注解
@Component   --将组件纳入容器
@Aspect   --定义方面
@Pointcut("within(包名)")   --切入点,定义在某个方法,变量,或者类上面
@Around,@Before,@AfterReturing,@After, @AfterThrowing,在具体方法上面定义通知类型

spring与mybatis整合

1.引入依赖
- a.spring-context
- b.spring-aspects
- c.mybatis
- d.mybatis-spring
- e.spring-jdbc
- f.durid
- g.mysql-connertor

2.引入spring主配置文件
// spring加载mybatis,在配置文件中配置mybatis
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="myDataSource"/>
    // mapper配置文件
    <!--peoperty name="mapperLocations" value="testMapper.xml"/-->  // 单个写法
    <property name="MapperLocations"> // 多个写法
    	<list>
    		<value>
    			xxx.xml
    		</value>
    		<value>
    			yyy.xml
    		</value>
    	</lisr>
    </property>
    <!--property name="mapperLocations" value="mapper/*.xml"></property->  //批量写法
    <peoperty name="typeAliasesPackage" value="包名"/> // 定义别名
</bean>

// 加载数据库配置文件
<util:properties id="db" location="classPath:db.properties"/>
<!--配置连接池/>
<bean id="myDataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="url" value="jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf8">
	<property name="driverClassName" value="com.mysql.jdbc.Driver">
	<property name="username" value="db.name">
	<property name="password" value="1111">
	<property name="initialSize" value="2"> // 初始化大小
	<property name="minIdle" value="2"> // 至少空闲数
	<property name="maxActive" value="10"> // 最大连接数
	<property name="maxWait" value="3000">  // 超时时间,单位毫秒
</bean>

// 注册接口所对应的实现类(dao),代替sqlsession.getmapper
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
    <property name="basePackage" value="xx.xx.dao"/> //扫描并注册下面的dao接口
    <property name="annotationClass" value="Annotation包">  // 表示加了指定注解的dto才会被自动加载
</bean>

spring事务

  1. 事务
    事务是包含一系列动作组成的完整的工作单元。一系列动作要么都成功,要么一个都失败,假如中间有失败的动作,所有的东西都要回滚到初始状态
  2. 事务的四个特性
    1.原子性 --一个事务是一个整体
    2.一致性 --数据变化前后总量不变
    3.隔离性
    4.持久性 --数据变化后进行入库存储
  3. 事务的隔离级别
    read-uncommitted ->读未提交->B事务可以看到A事务未提交的数据(会读到脏数据)
    read-committed ->读提交->B事务可以读A事务提交的数据->(不可重复度)(存疑待详细了解)
    repeatable-read ->可重复度->B事务读不到A事务提交的数据->(幻读)(存疑待详细了解)–>A事务删除一条记录,B事务在A事务删除之前做一次查询,B事务在A事务删除之后依然能查到该条数据但无法删除,犹如幻觉
    serializable 序列化
  4. spring事务
    1.spring提供了事务的支持,其本质是对数据库事务的封装。数据库若不支持事务,则spring也无法提供事务的功能。
    2.spring提供了统一管理事务的组件,platformTransactionManager,具体事务管理机制由各个平台自己实现。如果是Hibernate的orm框架,提供的事务管理组件是HibernateTransactionManager;JDBC/mybatis,提供的事务管理组件是DataSourceTransactionManager
  5. 事务定义TransactionDefinition
    该组件定义了spring组件管理事务的策略。
    1.事务传播
    2.事务隔离–与数据库支持的隔离级别一直,默认是mysql数据库的隔离级别(可重复度)。
    3.事务超时–特定时间内事务没有执行完毕事务就会自动回滚,默认时间与mysql的超时时间保持一致。
    4.是否只读–设置是否是只读事务,如果事务只对数据库进行查询操作就可以设置为只读事务,来减少事务的消耗
    5.事务回滚–默认情况下事务只有遇到运行时间异常时才会回滚。而在遇到检查性异常时不会回滚。可以通过配置设置哪些运行期间异常不回滚,也可以设置哪一些检查性异常需要回滚
  6. spring中的7种事务传播行为
    1.REQUIRED(常用)–如果当前没有事务,就新建一个事务,有过已经存在一个事务,就加入到这个事务。
    2.SuPPORTS:支持当前事务。如果当前没有事务就以非事务的方式运行
    3.MANDATOR:强制。使用当前事务,如果当前没有事务就抛出异常
    4.REQUIRES_NEW:需要JTA事务管理器的支持。新建事务,如果当前存在事务,就把当前的事务挂起。
    5.NOT_SUPPORTED:以非事务的方式执行操作,如果当前存在事务就把当前事务挂起。
    6.NEVER:以非事务的方式运行,如果当前存在事务,就抛出异常
    7.NESTED:嵌套,如果当前存在事务,就在嵌套事务中执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。
  7. spring事务管理方式
    1.编程式事务管理(了解)
    2.声明式事务管理:
    a.基于xm方式; step1.在spring组建中定义事务管理器组件,添加datasource注入;step2.添加事务aop配置(事务控制基于AOP思想)
    // 配置事务管理组件
    <bean id =“txManager” class=“org.springframework.jdbc.datasource.DataSourceTransactionManger”>
    <property name=“dataSource” ref=“myDataSource”> <property>
    </bean>

//在配置文件中新增名为xmls:tx的配置
// 定义通知类型以及方面组件,advice相当于环绕型通知
<tx:advice id=“txAdvice” transaction-manager=“txManager”>
<tx:attributes>
<tx:method name=“方法名” > // 指定哪个方法需要用事务控制,可配置传播行为,是否只读等
<tx:method>
<tx:attributes>
<tx:advice>
// 定义切入点
<aop:config>
<aop:advisor advice-ref=“txAdvice” poinfcut=“within(包名)”>
<aop:advisor>
<aop:config>
b.基于注解方式 ;step1.需要保留,在spring组建中定义事务管理器组件,添加datasource注入;
step2.开启组件扫描(见aop开启组件扫描)
step3.启用事务注解
<tx:annotation-driven trancaction-manager=“txManager”> </tx:annotation-driven>
step4.在需要开启事务的方法上增加@Transactional()注解
注意:假如需要加事务的类实现了接口,需要使用CGLIB的方式创建代理类,需要在启用事务注解上面加上proxy-target-class="true"配置(目标组件是controller且其实现了其他接口)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值