AOP使用注解配置流程:
1、当spring容器启动时候,
< context:component- scan base-package= "cn.itheima03.spring.aop.annotation" ></context :component-scan> |
2、在上面的包及子包中查询所有的类,按照类扫描注解的机制把类放入到spring容器中
3、 检查是否配置:<aop:aspectj-autoproxy> </aop: aspectj-autoproxy>
4、查找哪些类上加@Aspect注解,会查找加了该注解的所有的方法,看方法上是否有 @Pointcut注解
5、把 @Pointcut的切入点表达式解析出来和spring中的bean进行匹配,如果匹配成功,则创建代理对象
6、 生成的代理对象的方法=通知+ 目标方法
完整代码:
1.配置文件:appliactionContext.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd" > <!-- 1、把所有的bean放入到spring容器中,启动类扫描机制的注解 2、启动AOP的注解 --> <context:component-scan base-package="cn.itheima03.spring.aop.annotation" ></context:component-scan> <aop:aspectj-autoproxy></ aop:aspectj-autoproxy> </beans> |
2.给相关类配置注解:
//配置注解,需要产生实例 @Repository("classesDao" ) public class ClassesDaoImpl extends HibernateUtils implements ClassesDao{ public String sessionFactory.getCurrentSession().save(classes); return "aaaa" ; } public List<Classes> return sessionFactory .getCurrentSession().createQuery("from } public void updateClasses(Classes sessionFactory.getCurrentSession().update(classes); } } ============================= /** * @Aspect该注解说明该类是一个切面类 ,等效于: * <aop:aspect ref="myTransaction"> * <aop:pointcut expression="execution(* cn.itheima03.spring.aop.annotation.ClassesDaoImpl.*(..))" * id=" aa()"/> * </aop:aspect> */ @Component("myTransaction" ) @Aspect public class MyTransaction extends HibernateUtils{ private Transaction transaction; @Pointcut("execution(* private void aa(){} //方法签名 @Before("aa()") public void beginTransaction(){ this.transaction = sessionFactory.getCurrentSession().beginTransaction(); } @AfterReturning( "aa()") public void commit(){ this.transaction .commit(); } } |
版权声明:本文为博主原创文章,未经博主允许不得转载。