标签:-- 简单 aspect init 根据 advice ring poi express
1.扫描包<context:component-scan>
2.穿件对象交给容器 @Component 相当于:<bean id="" class="">
3.依赖注入@Autowired 相当于:<property name="" ref="">
4.@Value 注入基本数据类型和 String 类型数据的
简单的说它就是把我们程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的
基础上,对我们的已有方法进行增强
1.JDK动态代理 通过Proxy类实现
2.CGLIB
3.基于代理类 ProxyFactoryBean创建AOP代理
4.AspectJ
--基于xml
aop:aspect: 作用: 用于配置切面。 属性: id:给切面提供一个唯一标识。 ref:引用配置好的通知类 bean 的 id。 <aop:aspect id="txAdvice" ref="txManager"> <!--配置通知的类型要写在此处--> </aop:aspect> aop:before 作用: 用于配置前置通知。 指定增强的方法在切入点方法之前执行 属性: method:用于指定通知类中的增强方法名称 ponitcut-ref:用于指定切入点的表达式的引用 poinitcut:用于指定切入点表达式 执行时间点: 切入点方法执行之前执行 <aop:before method="beginTransaction" pointcut-ref="pt1"/> 切入点: <!--( * com.service.impl.*.*(..)) 第一个*代表返回类型,表示所有返回类型,第二个*表示类名,第三个*表示所有方法 ..表示方法中的任意参数-->
--基于注解
<!--配置spring开启注解AOP的支持-->
<aop:aspectj-autoproxy/>
@Pointcut("execution(* com.service.impl.*.*(..))")
--spring通知类型
<!--配置AOP--> <aop:config> <!--配置切面--> <!--配置切入点表达式 下面的配置可以引用它--> <aop:pointcut id="pt" expression="execution( * com.service.impl.*.*(..))"/> <aop:aspect id="logAdvice" ref="logger"> <!--前置通知--> <!--( * com.service.impl.*.*(..)) 第一个*代表返回类型,表示所有返回类型,第二个*表示类名,第三个*表示所有方法 ..表示方法中的任意参数--> <aop:before method="beforePrintLog" pointcut="execution( * com.service.impl.*.*(..))"/><!--1.第一种配置方法--> <!--后置通知--> <aop:after-returning method="afterPrintLog" pointcut-ref="pt"/><!--2.第二种配置方法引用切入点表达式--> <!--异常通知--> <aop:after-throwing method="throwPrintLog" pointcut-ref="pt"/> <!--最终通知--> <aop:after method="FinalPrintLog" pointcut-ref="pt"/> <!--环绕通知 (当配置了环绕通知后,前置通知不再执行了)--> <!-- <aop:around method="xxx" pointcut-ref="pt"></aop:around>--> </aop:aspect> </aop:config>
它是 spring 框架中提供的一个对象,是对原始 Jdbc API 对象的简单封装。spring 框架为我们提供了很多 的操作模板类。
--使用
//1.获取 Spring 容器 ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
//2.根据 id 获取 bean 对象 JdbcTemplate jt = (JdbcTemplate) ac.getBean("jdbcTemplate");
//3.执行操作 jt.execute("insert into account(name,money)values(‘eee‘,500)");
spring 的事务控制都是基于 AOP 的,它既可以使用编程的方式实现,也可以使用配置(声名式)的方式实现。
重点是使用配置的方式实现
...
基于xml <!--2.配置事务通知--> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <!--5.配置事务的属性--> <tx:attributes> <!-- <tx:method xxx="xxx" ,xxx="xxx" ....配置事务的属性 isolation:用于指定事务的隔离级别。默认值是DEFAULT,表示使用数据库的默认隔离级别。 propagation:用于指定事务的传播行为。默认值是REQUIRED,表示一定会有事务,增删改的选择。查询方法可以选择SUPPORTS。 read-only:用于指定事务是否只读。只有查询方法才能设置为true。默认值是false,表示读写。 timeout:用于指定事务的超时时间,默认值是-1,表示永不超时。如果指定了数值,以秒为单位。 rollback-for:用于指定一个异常,当产生该异常时,事务回滚,产生其他异常时,事务不回滚。没有默认值。表示任何异常都回滚。 no-rollback-for:用于指定一个异常,当产生该异常时,事务不回滚,产生其他异常时事务回滚。没有默认值。表示任何异常都回滚。 --> <tx:method name="transfer" propagation="REQUIRED" read-only="false"/> </tx:attributes> </tx:advice>
注解:<!--2.开启spring对注解事务的支持--> <tx:annotation-driven transaction-manager="transactionManager"/> @Transactional //在需要的类或方法开启事务 增删改数据发生错误 就会回滚数据防止错误
标签:-- 简单 aspect init 根据 advice ring poi express
原文地址:https://www.cnblogs.com/july7/p/13242049.html