快捷搜索:  汽车  科技

aspect会创建容器对象吗(AspectJ开发)

aspect会创建容器对象吗(AspectJ开发)2.在目标类 com.three.the3_4_1.UserDaolmpl 中 , 添加注解@Repository("userDao")这里首先使用@Aspect注解定义了切面类,由于该类在Spring中是作为组件使用的,所以还需要添加@Component注解才能生效。然后使用了@Poincut注解来配置切入点表达式,并通过定义方法来表示切入点名称。接下来在每个通知相应的方法上添加了相应的注解,并将切入点名称"myPointCut"作为参数传递给需要执行增强的通知方法。3.在创建的包下,创建测试类test,在类中为了更加清晰地演示几种通知的执行情况,这里对addUser()和deleteUser()进行增强测试4.结果1.在项目的 src 目录下,创建一个包(com.three.the3_4_2),将上面示例的切面类 myAspect 复制到该包下,并对该文

AspectJ是一个基于Java语言的AOP框架,它提供了强大的AOP功能。Spring 2.0以后,Spring AOP引入了对AspectJ的支持,并允许直接使用AspectJ进行编程,而Spring自身的AOP API也尽量与AspectJ保持一致。新版本的Spring框架,也建议使用AspectJ来开发AOP。使用AspectJ实现AOP有两种方式:一种是基于XML的声明式AspectJ,另一种是基于注解的声明式AspectJ。


基于XML的声明式AspectJ

1.在项目的src目录下,创建一个包(示例:com.three.the3_4_1),在该包中创建切面类myAspect,并在类中分别定义不同类型的通知。

aspect会创建容器对象吗(AspectJ开发)(1)

aspect会创建容器对象吗(AspectJ开发)(2)

myAspect类中分别定义了5种不同类型的通知,在通知中使用了JoinPoint接口及其子接口ProceedingJoinPoint作为参数来获得目标对象的类名、目标方法名和目标方法参数等。需要注意的是,环绕通知必须接收一个类型为ProceedingJoinPoint的参数,返回值也必须是Object类型,且必须抛出异常。异常通知中可以传入Throwable类型的参数来输出异常信息。

2.在创建的包中,创建配置文件applicationContext.xml

aspect会创建容器对象吗(AspectJ开发)(3)

3.在创建的包下,创建测试类test,在类中为了更加清晰地演示几种通知的执行情况,这里对addUser()和deleteUser()进行增强测试

aspect会创建容器对象吗(AspectJ开发)(4)

4.结果

aspect会创建容器对象吗(AspectJ开发)(5)


墓于注解的声明式 AspectJ

1.在项目的 src 目录下,创建一个包(com.three.the3_4_2),将上面示例的切面类 myAspect 复制到该包下,并对该文件进行编辑

aspect会创建容器对象吗(AspectJ开发)(6)

aspect会创建容器对象吗(AspectJ开发)(7)

这里首先使用@Aspect注解定义了切面类,由于该类在Spring中是作为组件使用的,所以还需要添加@Component注解才能生效。然后使用了@Poincut注解来配置切入点表达式,并通过定义方法来表示切入点名称。接下来在每个通知相应的方法上添加了相应的注解,并将切入点名称"myPointCut"作为参数传递给需要执行增强的通知方法。

2.在目标类 com.three.the3_4_1.UserDaolmpl 中 , 添加注解@Repository("userDao")

3.在创建的包下,创建配置文件 applicationContext.xml

aspect会创建容器对象吗(AspectJ开发)(8)

4.与上面示例的测试基本一致,知识配置路径不同

aspect会创建容器对象吗(AspectJ开发)(9)

5.结果

aspect会创建容器对象吗(AspectJ开发)(10)

猜您喜欢: