持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情
Step5:测试类中使用目标对象的 id
@Test\
public void test01(){\
ApplicationContext ac = new ClassPathXmlApplicationContext("s01/applicationContext.xml");\
SomeService someService = (SomeService) ac.getBean("someService");\
System.*out*.println(someService.getClass());\
String s = someService.doSome("张三",22);\
System.*out*.println(s);\
}
运行结果:
(2) @Before前置通知方法有JoinPoint参数
在目标方法执行之前执行。被注解为前置通知的方法,可以包含一个 JoinPoint 类型参数。该类型的对象本身就是切入点表达式。通过该参数,可获取切入点表达式、方法签名、目标对象等。
不光前置通知的方法,可以包含一个 JoinPoint 类型参数,所有的通知方法均可包含该参数。
@Aspect //交给AspectJ框架去识别切面类,来进行切面方法的调用\
public class MyAspect {\
**@Before(value = "execution( * com.bjpowernode.s01.*.*(..))")\
public void myBefore(JoinPoint joinPoint){\
System.*out*.println("前置功能输出...............");\
System.*out*.println("目标方法的签名:"+joinPoint.getSignature());\
System.*out*.println("目标方法的所有参数:"+ Arrays.*toString*(joinPoint.getArgs()));\
}
运行结果:
(3) @AfterReturning后置通知注解有returning属性
在目标方法执行之后执行。由于是目标方法之后执行,所以可以获取到目标方法的返回值。该注解的 returning 属性就是用于指定接收方法返回值的变量名的。所以,被注解为后置通知的方法,除了可以包含 JoinPoint 参数外,还可以包含用于接收返回值的变量。该变量最好为 Object 类型,因为目标方法的返回值可能是任何类型。
接口方法:
public interface SomeService {\
String doSome(String name, int age);\
Student change();\
}
实现方法:
@Component\
public class SomeServiceImpl implements SomeService {\
@Override\
public String doSome(String name, int age) {\
System.*out*.println(name+"doSome方法被调用 (主业务方法)");\
return "abcd";\
}\
@Override\
public Student change() {\
return new Student("张三");\
}\
}