本文主要是介绍第五讲的课堂练习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
课上老师带着我们完成了骑士类的相关操作。
一、增加救美任务类与救美骑士类
1、在lesson05.aop_xml子包里创建救美骑士类 - DamselRescuingKnight
package net.tjl.spring.lesson05.aop_xml;import net.tjl.spring.lesson4.RescueDamselQuest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;/*** 功能:救美骑士类* 作者:谭金兰* 日期:2021年03月24日*/
@Component
public class DamselRescuingKnight {@Autowiredprivate RescueDamselQuest rescueDamselQuest;public void embarkOnQuest() {rescueDamselQuest.embark();}
}
2、在lesson05.aop_xml子包里创建救美骑士类 - RescueDamselQuest
package net.tjl.spring.lesson05.aop_xml;import org.springframework.stereotype.Component;/*** 功能:救美任务类* 作者:谭金兰* 日期:2021年03月24日*/
@Component
public class RescueDamselQuest {public void embark() {System.out.println("执行救美任务。");}
}
3、在测试类里增加测试方法 - testDamselRescuingKnight()
3、运行testDamselRescuingKnight()方法,查看结果
三、采用注解方式使用AOP
1、在net.tjl.spring包里创建lesson05.aop_annotation子包
2、在aop_annotation子包里创建杀龙任务类 - SlayDragonQuest
package net.tjl.spring.lesson05.aop_annotation;import org.springframework.stereotype.Component;/*** 功能:杀龙任务类* 作者:谭金兰* 日期:2021年03月24日*/
@Component
public class SlayDragonQuest {public void embark() {System.out.println("执行杀龙任务。");}
}
3、在aop_annotation子包里创建勇敢骑士类 - BraveKnight
package net.tjl.spring.lesson05.aop_annotation;import net.tjl.spring.lesson05.aop_xml.SlayDragonQuest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;/*** 功能:勇敢骑士类* 作者:谭金兰* 日期:2021年03月24日*/
@Component("Mike")
public class BraveKnight {@Autowiredprivate SlayDragonQuest slayDragonQuest;public void embarkOnQuest() {slayDragonQuest.embark();}
}
4、在aop_annotation子包里创建注解接口 - Action
package net.tjl.spring.lesson05.aop_annotation;import java.lang.annotation.*;/*** 功能:动作注解接口* 作者:谭金兰* 日期:2021年03月24日*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Action {String name();
}
5、在aop_annotation子包里创建游吟诗人切面 - MinstrelAspect
package net.tjl.spring.lesson05.aop_annotation;
/*** 功能:游吟诗人类* 作者:谭金兰* 日期:2021年03月24日*/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
public class MinstrelAspect {@Pointcut("execution(* *.embarkOnQuest(..))")public void embark(){}@Before("embark()")public void singBeforeQuest(JoinPoint joinPoint) {System.out.println("啦啦啦,骑士出发了!");}@After("embark()")public void singAfterQuest(JoinPoint joinPoint) {System.out.println("真棒啊!骑士完成了任务!");}}
6、在aop_annotation子包里创建Spring配置类 - AopConfig
package net.tjl.spring.lesson05.aop_annotation;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;/*** 功能:AOP配置类* 作者:谭金兰* 日期:2021年03月24日*/@Configuration // 标明是Spring配置类
@ComponentScan("net.tjl.spring.lesson05.aop_annotation") // 组件扫描
@EnableAspectJAutoProxy // 开启Spring对ApectJ的支持
public class AopConfig {
}
7、在aop_annotation子包里创建测试类 - TestKnight
package net.tjl.spring.lesson05.aop_annotation;import net.tjl.spring.lesson05.aop_xml.BraveKnight;
import net.tjl.spring.lesson05.aop_xml.DamselRescuingKnight;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** 功能:测试骑士类* 作者:谭金兰* 日期:2021年03月24日*/
public class TestKnight {private ClassPathXmlApplicationContext context;@Beforepublic void init() {// 基于Spring配置文件创建应用容器context = new ClassPathXmlApplicationContext("aop_xml/spring-config.xml");}@Testpublic void testBraveKnight() {// 根据名称从应用容器里获取勇敢骑士对象net.tjl.spring.lesson05.aop_xml.BraveKnight braveKnight = (BraveKnight) context.getBean("Mike");// 勇敢骑士执行任务braveKnight.embarkOnQuest();}@Afterpublic void destroy() {// 关闭应用容器context.close();}
}
8、运行测试方法testBraveKnight(),查看效果
9、增加救美任务类与救美骑士类
package net.tjl.spring.lesson05.aop_annotation;import org.springframework.stereotype.Component;/*** 功能:救美任务类* 作者:谭金兰* 日期:2021年03月24日*/
@Component
public class RescueDamselQuest {public void embark() {System.out.println("执行救美任务。");}
}
package net.tjl.spring.lesson05.aop_annotation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;/*** 功能:救美骑士类* 作者:谭金兰* 日期:2021年03月24日*/
@Component
public class DamselRescuingKnight {@Autowiredprivate RescueDamselQuest rescueDamselQuest;public void embarkOnQuest() {rescueDamselQuest.embark();}
}
(2)在测试程序里增加对救美骑士的测试方法 - testDamselRescuingKnight()
(3) 运行测试方法testDamselRescuingKnight(),查看效果
10、实现注解式拦截
(1)修改勇敢骑士类,给embarkOnQuest()添加自定义注解Action
(2)修改游吟诗人切面类 - MinstrelAspect
(3)运行测试方法testBraveKnight(),查看效果
(3)运行测试方法testDamselRescuingKnight()(),查看效果
这篇关于第五讲的课堂练习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!