spring 入门实战(五) aop基于注解的使用
2018-03-26 19:39
381 查看
1.0 开发环境
同上一篇文章 Spring 入门实战(四) aop2.0 准备工作
由于本篇还是基于aop的 所以我们还是基于上节的代码 做一些相应改动即可2.1 主业务模块 Affairs.java 同上一篇文章
2.2 切面功能类 Function.java
package com.ccut.aop; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; @Aspect public class Function { private String fmessage; private String mmessage; public Function(){} public String getFmessage() { return fmessage; } public void< 4000 /span> setFmessage(String fmessage) { this.fmessage = fmessage; } public String getMmessage() { return mmessage; } public void setMmessage(String mmessage) { this.mmessage = mmessage; } @Pointcut("execution(* com.ccut.aop.Affairs.PersonA())") public void cut2(){}; //before增强 @Before(value="cut2()") public void f(){ System.out.println(this.getFmessage()); } //环绕增强 @Around(value="cut2()") public void around(ProceedingJoinPoint pj){ System.out.println("在目标函数之前执行"); try { pj.proceed(); } catch (Throwable e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ System.out.println("在目标函数之后执行"); } } //after增强 @After(value="cut2()") public void m(){ System.out.println(this.getMmessage()); } //返回增强 @AfterReturning(pointcut="execution(* com.ccut..*(..))",returning = "msg") public void mess(String msg){ System.out.println(msg+" 这是返回后的信息"); } //异常增强 @AfterThrowing(value="cut2()",throwing="ex") public void err(Throwable ex){ System.out.println("这个错误是:"+ex); } }
2.3 测试类Test.java
package com.ccut.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.ccut.aop.Affairs; public class Test { public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("./resources/aop.xml"); Affairs affairs = (Affairs) applicationContext.getBean("affairs"); affairs.PersonA(); affairs.PersonB(); affairs.getMessage1(); affairs.error(); } }
2.4 配置文件 aop.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <aop:aspectj-autoproxy/> <bean id="affairs" class = "com.ccut.aop.Affairs"> <property name="message1" value="我就是 A 啊 这有什么疑问吗?"/> <property name="message2" value="我就是 B 啊 这有什么疑问吗?"/> </bean> <bean id = "function" class="com.ccut.aop.Function"> <property name="fmessage" value="我可能在你前面执行!"></property> <property name="mmessage" value="我可能在你后面执行呢!"></property> </bean> </beans>
3.0 工程目录
4.0 执行结果
几点说明
@Aspect 代表这个类是切片类
@Pointcut(“execution(* com.ccut.aop.Affairs.PersonA())”)
public void cut2(){}; 定义切入点为 com.ccut.aop.Affairs.下的PersonA() 方法 切入点的名字叫做cut2,相当于xml中的id
@Before(value=”cut2()”) value的值指向切入点id
@AfterReturning(pointcut=”execution(* com.ccut..*(..))”,returning = “msg”) 除了用value外还可以自定义切入点
配置文件中 < aop:aspectj-autoproxy/>代表启用aop注释 这样就不需要在xml配置文件中写代码了
相关文章推荐
- 基于注解的Spring AOP的配置和使用--转载
- 基于注解的Spring AOP的配置和使用
- 基于注解的Spring AOP的配置和使用--转载
- 基于注解的Spring AOP的配置和使用--转载
- 基于注解的Spring AOP的配置和使用
- Spring3.0 入门进阶(3):基于XML方式的AOP使用
- SpringAOP使用入门,如何对自定义的注解进行切面编程
- 基于注解的Spring AOP的配置和使用--转载
- 基于注解的Spring AOP的配置和使用 (顶)
- (9) 使用Spring的注解方式实现AOP入门 以及 细节
- 【Spring】基于注解的Spring AOP的配置和使用
- 一步一步深入spring(5)--使用基于注解的spring实现 AOP
- 基于注解的Spring AOP的配置和使用--转载
- Spring AOP的使用 基于全注解AspectJ
- spring aop的使用(注解方式以及基于xml配置方式)
- Spring入门学习初体验(2)----基于注解的AOP
- 使用Spring的注解方式实现AOP入门
- spring aop的使用(注解方式以及基于xml配置方式)
- 基于注解的Spring AOP的配置和使用
- Spring AOP使用配置介绍(四):基于@AspectJ注解的aop