@AspectJ注解配置切面编程(注解方式)

搭建环境

新建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到工程

第一步: 编写目标对象 (bean)、spring容器、测试类

(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类中添加通知方法

你可能感兴趣的:(spring)