新建web项目 spring4_day03_annotation , 引入依赖
pom.xml
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-aspectsartifactId>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-log4j12artifactId>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-testartifactId>
<version>4.3.13.RELEASEversion>
dependency>
同时导入
applicationContext.xml,
log4j.properties到工程
(1):创建接口CustomerService.java
1) 编写通知类,在通知类 添加@Aspect 注解,代表这是一个切面类,并将切面类交给spring管理(能被spring扫描到@Component)。
@Component(“myAspect”):将增强的类交给spring管理,才可以增强
@Aspect:将该类标识为切面类(这里面有方法进行增强),相当于
在切面的类MyAspect.java类中添加通知方法@Before(),
方案一:可以直接将切入点的表达式写到@Before()中
//前置通知
//相当于:
//@Before("bean(*Service)"):参数值:自动支持切入点表达式或切入点名字
@Before("bean(*Service)")
public void before(JoinPoint joinPoint){
System.out.println("=======前置通知。。。。。");
}
方案二:可以使用自定义方法,使用@Pointcut 定义切入点
切入点方法的语法要求:
切点方法:private void 无参数、无方法体的方法,方法名为切入点的名称
一个通知方法@Before可以使用多个切入点表达式,中间使用“||”符合分隔,用来表示多个切入点
//自定义切入点
//方法名就是切入点的名字
//相当于
@Pointcut("bean(customerService)")
private void myPointcut(){}
//自定义切入点
//方法名就是切入点的名字
//相当于
@Pointcut("bean(productService)")
private void myPointcut2(){}
//前置通知
//相当于:
//相当于:
@Before("myPointcut()||myPointcut2()")
public void before(JoinPoint joinPoint){
System.out.println("=======前置通知。。。。。");
}
在切面的类MyAspect.java类中添加通知方法
在切面的类MyAspect.java类中添加通知方法
在切面的类MyAspect.java类中添加通知方法
在切面的类MyAspect.java类中添加通知方法