Java企业开发学习笔记(5下)采用注解方式使用AOP

文章展示了如何在Spring框架中使用注解来实现面向切面编程(AOP)。创建了SlayDragonQuest和BraveKnight类,然后定义了MinstrelAspect切面来在任务执行前后添加额外的行为。通过AopConfig启用AspectJ支持,并在测试类中验证了AOP的效果。此外,还添加了RescueDamselQuest和RescueDamselKnight类作为扩展练习。

二、采用注解方式使用AOP
2.1 创建所需自包
在cn.kox.spring包里创建day05.aop_annotation子包

2.2 创建杀龙任务
在aop_annotation子包里创建杀龙任务类 - SlayDragonQuest

package cn.kox.spring.day05.aop_annotation;

import org.springframework.stereotype.Component;

/*

  • 杀龙任务类
  • */

@Component
public class SlayDragonQuest {
public void embark() {
System.out.println(“执行杀龙任务。”);
}
}

2.3 创建勇敢骑士类
在aop_annotation子包里创建勇敢骑士类 - BraveKnight

package cn.kox.spring.day05.aop_annotation;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/*

  • 勇敢骑士类
  • */

@Component(“Mike”)
public class BraveKnight {
@Autowired
private SlayDragonQuest slayDragonQuest;

public void embarkOnQuest() {
    slayDragonQuest.embark();
}

}

2.4 创建吟游诗人切面
在aop_annotation子包里创建游吟诗人切面 - MinstrelAspect

package cn.kox.spring.day05.aop_annotation;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/*

  • 吟游诗人切片类
  • */

@Aspect // 声明为切面
@Component // 交给Spring容器管理
public class MinstrelAspect {
// 注解声明切点
@Pointcut(“execution(* cn.kox.spring…*.embarkOnQuest(…))”)
public void embark() {
}

// 注解声明前置通知
@Before("embark()")
public void singBeforeQuest(JoinPoint joinPoint) {
    System.out.println("啦啦啦,骑士出发了!");
}

// 注解声明后置通知
@After("embark()")
public void singAfterQuest(JoinPoint joinPoint) {
    System.out.println("真棒啊!骑士完成了任务!");
}

}

2.5 创建Spring配置类
在aop_annotation子包里创建Spring配置类 - AopConfig

package cn.kox.spring.day05.aop_annotation;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

/*

  • AOP配置类
  • */

@Configuration // 标明Spring配置类
@ComponentScan(“cn.kox.spring.day05.aop_annotation”) // 组件扫描
@EnableAspectJAutoProxy // 开启Spring对AspectJ的支持
public class AopConfig {
}

2.6 创建骑士测试类
在test/java/aop_annotation子包里创建测试类 - TestKnight

package cn.kox.spring.day05.aop_annotation;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/*

  • 测试骑士类
  • */

public class TestKnight {

private AnnotationConfigApplicationContext context; // 基于注解配置类的应用容器

@Before
public void init() {
    // 基于注解配置类创建应用容器
    context = new AnnotationConfigApplicationContext(AopConfig.class);
}

@Test
public void testBraveKnight() {
    // 根据名称从应用容器里获取勇敢骑士对象
    BraveKnight knight = (BraveKnight) context.getBean("Mike");
    // 勇敢骑士执行任务
    knight.embarkOnQuest();
}

@After
public void destroy() {
    // 关闭应用容器
    context.close();
}

}

2.7 运行测试方法testBraveKnight(),查看效果

2.8 课堂练习
2.8.1 增加救美任务类与救美骑士类
创建RescueDamselQuest类和RescueDamselKnight类
RescueDamselQuest类
package cn.kox.spring.day05.aop_annotation;

import org.springframework.stereotype.Component;

/*
*救美任务类

  • */
    @Component
    public class RescueDamselQuest {
    public void embark() {
    System.out.println(“执行就美任务…”);
    }
    }

RescueDamselKnight类
package cn.kox.spring.day05.aop_annotation;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/*

  • 救美骑士类

  • */
    @Component(“Mike233”)
    public class RescueDamselKnight {
    @Autowired
    private RescueDamselQuest rescueDamselQuest;

    public void embarkOnQuest() {
    rescueDamselQuest.embark();
    }
    }

2.8.2 在测试类里增救美骑士测试类
@Test
public void testDamselRescuingKnight() {
RescueDamselKnight knight2 = (RescueDamselKnight) context.getBean(“Mike233”);
knight2.embarkOnQuest();
}

2.8.3 运行testDamselRescuingKnight()方法,查看结果

三、 实现注解式拦截
3.1 创建注解接口
3.2 修改勇敢骑士类
给embarkOnQuest()添加自定义注解Action,并设置其name属性
3.3 修改游吟诗人切面
3.4 运行测试方法testBraveKnight(), 查看效果
3.5 修改救美骑士类,给embarkOnQuest()添加自定义注解Action
3.6 运行测试方法testDamselRescuingKnight(),查看效果

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值