roc bsp cee framework gty ins 输出 org arch
- 目标对象接口1 public interface IUserService {
- 2 public void add();
- 3 public void update();
- 4 public void del();
- 5 public void search();
- 6
- }
1.创建目标对象
- public class UserServiceImpl implements IUserService {
- @Override
- public void add() {
- System.out.println("add....");
- }
- @Override
- public void update() {
- System.out.println("update....");
- }
- @Override
- public void del() {
- System.out.println("del....");
- }
- @Override
- public void search() {
- System.out.println("search....");
- }
- }
2.创建通知(增强 advice)
- //adcice增强类
- public class UserServiceHelper {
- //前置通知
- public void before(JoinPoint jp) {
- System.out.println("拦截目标类" + jp.getSignature().getDeclaringTypeName());
- System.out.println("拦截目标方法名" + jp.getSignature().getName());
- System.out.println("前置通知");
- }
- public void afterreturning(JoinPoint jp, Object val) {
- System.out.println("目标返回值" + val);
- System.out.println("后置通知");
- }
- public Object around(ProceedingJoinPoint pjp) throws Throwable {
- System.out.println("环绕前通知");
- Object value = pjp.proceed();
- System.out.println("环绕后通知");
- return value;
- }
- public void afterthrowing(JoinPoint jp, Throwable ex) {
- //有异常时才输出
- System.out.println("异常抛出通知" + ex);
- }
- public void after(JoinPoint jp) {
- System.out.println("拦截目标方法名" + jp.getSignature().getName());
- System.out.println("最终通知");
- }
- }
3.1在Spring的applicationContext.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:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
- <import resource="./aop4.xml" />
- </beans>
3.2在Spring的xmp配置apo1.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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
- <!-- target 目标对象 -->
- <bean id="userService" class="cn.aspectjs.UserServiceImpl" />
- <!-- advice 通知-->
- <bean id="userServiceAdvice" class="cn.aspectjs.UserServiceHelper" />
- <!-- config是用来声明,内容表示不管有没有接口,都用aspectj框架实现aop,aspect用来配置切面 -->
- <aop:config proxy-target-class="true">
- <aop:aspect ref="userServiceAdvice">
- <aop:pointcut expression="execution(* *.add(..))" id="MypointCut" />
- <!-- method是增强类 -->
- <aop:before method="" />
- <aop:before method="before" pointcut-ref="MypointCut" />
- <aop:after-returning method="afterreturning" pointcut-ref="MypointCut"
- returning="val" />
- <aop:around method="around" pointcut-ref="MypointCut" />
- <aop:after-throwing method="afterthrowing" pointcut-ref="MypointCut" throwing="ex"
- />
- <aop:after method="after" pointcut-ref="MypointCut" />
- </aop:aspect>
- </aop:config>
- </beans>
4.测试类
- //Spring整合JUnit测试
- @RunWith(SpringJUnit4ClassRunner.class)
- //参数定义了要装入的Spring配置文件
- 2@ContextConfiguration(locations = "classpath:applicationContext.xml") 3 public class AspectJTest {
- 4@Autowired 5 private IUserService userService;
- 6@Test 7 public void test1() {
- 8 //对应aop1.xml中的aspectj定义的通知.
- 9 userService.add();
- 10
- }
- 11
- }
在Spring中Aspectj框架定义的通知类型
roc bsp cee framework gty ins 输出 org arch
原文:http://www.cnblogs.com/wwwzzz/p/7906128.html
来源: http://www.bubuko.com/infodetail-2409561.html