使用简单的方式. AspectJ 方式实现

1.新建一个类,不用实现

1.1类中的方法名随便定义

	public class MyAdivce {
	public void mybefore(String name,int age) {
		System.out.println("前置1"+name+",,,"+age);
	}
	public void mybefore1(String name) {
		System.out.println("前置2"+name);
	}
	public void myaftering() {
		System.out.println("后置2");
	}
	public void myagter() {
		System.out.println("后置1");
	}
	public void mythrow() {
		System.out.println("异常");
	}
	public Object myarround(ProceedingJoinPoint p) throws Throwable{
		System.out.println("执行环绕");
		System.out.println("环绕-前置");
		Object result = p.proceed();
		System.out.println("环绕后置");
		return result;
		
	}
}

1.2建一个类,

public class Demo {
	public void demo01(String name,int age) throws Exception {
			//int i=5/0;
		System.out.println("demo01"+name+"    ,"+age);
	}
	public void demo01(String name) throws Exception {
		//int i=5/0;
	System.out.println("demo01y一个参数"+name);
}
}

1.3配置spring中的applicationContext.xml文件

  <bean id="demo" class="com.oyzk.test.Demo"></bean>
	<bean id="myAdivce" class="com.oyzk.advice.MyAdivce"></bean>
<aop:config>
	<aop:aspect ref="myAdivce">
	<aop:pointcut expression="execution(* com.oyzk.test.Demo.demo01(..)) and args(name,age)" id="mypoint"/>
		<aop:pointcut expression="execution(* com.oyzk.test.Demo.demo01(..)) and args(name)" id="mypoint01"/>
		<aop:pointcut expression="execution(* com.oyzk.test.Demo.demo01(..))" id="mypoint02"/>
	<aop:before method="mybefore1" pointcut-ref="mypoint01" arg-names="name"/>	
	<aop:before method="mybefore" pointcut-ref="mypoint" arg-names="name,age"/>
	<aop:after method="myagter" pointcut-ref="mypoint02"/>
	<aop:after-returning method="myaftering" pointcut-ref="mypoint02"/>
	</aop:aspect>
</aop:config>

注意:
1.2.1 aop:after/ 后置通知,是否出现异常都执行
1.2.2aop:after-returning/后置通知,只有当切点正确是执行
1.2.3aop:after/、aop:after-returning/和aop:after-throwing/的执行顺序和配置顺序有关
1.2.4execution()括号不能扩上args
1.2.5中的and不能使用&&由spring把and解析成&&
1.2.6args名称自定义的,顺序和demo1(参数,参数)对应
1.2.7aop:before/ arg-names=” 名 称 ” 名 称 来 源 于 expression=”” 中 args(),名称必须一样,不然会报错
1.2.7.1 args有几个参数arg-names也必须有几个参数
1.2.7.2arg-names=“”里面的名称 必须和通知方法参数名对应
4:测试类:

public class Test {
	public static void main(String[] args) {
	ApplicationContext ac=new  ClassPathXmlApplicationContext("applicationContext.xml");
	Demo de=ac.getBean("demo",Demo.class);
	try {
		de.demo01("张三",12);
		de.demo01("李四");
	} catch (Exception e) {
		// TODO Auto-generated catch block
		//e.printStackTrace();	
	}
}
}

5:运行结果
在这里插入图片描述作用:不改动源代码,扩张其他功能。

### 回答1: org.aspectj.lang.annotation.pointcut是AspectJ框架中的一个注解,用于定义切点。切点是指在程序执行过程中,需要被拦截并注入增强逻辑的特定方法或代码段。通过使用pointcut注解,可以定义一个切点表达式,用于匹配需要拦截的方法或代码段。在AspectJ中,切点是AOP的核心概念之一,它决定了哪些方法或代码段需要被拦截和增强。 ### 回答2: org.aspectj.lang.annotation.pointcut是AspectJ框架中的一个注解类,用于定义切点(pointcut)。切点是在应用程序中选择连接点(join point)的一种方式AspectJ框架是一个Java语言的面向切面编程(AOP)框架,它允许开发人员将横切关注点(cross-cutting concerns)与业务逻辑分离开来。横切关注点是指那些在应用程序中不止一处出现的功能,如日志记录、安全控制和性能监控等。通过使用AspectJ框架,可以将这些横切关注点以模块化的方式添加到应用程序中,而无需修改原始的业务逻辑代码。 在AspectJ中,切点用于定义在哪些连接点上应用切面(aspect)中的横切逻辑。连接点是应用程序的执行点,如方法执行时、字段访问时等。通过使用org.aspectj.lang.annotation.pointcut注解,可以定义一个切点,以便将切面中的横切逻辑应用于特定的连接点。 定义一个切点可以使用不同的切点表达式(pointcut expression),以匹配不同的连接点。切点表达式使用特定的语法来描述连接点的名称、参数和修饰符等信息。AspectJ框架提供了丰富的切点表达式语法,以满足不同切点选择的需求。 总之,org.aspectj.lang.annotation.pointcut是AspectJ框架中用于定义切点的注解类。通过定义切点,可以将切面中的横切逻辑应用于选定的连接点,以实现对应用程序的横切功能。 ### 回答3: org.aspectj.lang.annotation.pointcut是AspectJ框架中的一个注解,用于定义切点。 切点是在AOP(面向切面编程)中用于指定在哪些方法或者类上应用特定的切面(Aspect)的表达式。切点表达式通过匹配程序的结构,如方法名、参数、返回值等,来选择需要被横切的连接点。AspectJ框架提供了一种灵活且强大的语法来定义切点。 通过使用@org.aspectj.lang.annotation.pointcut注解,开发者可以在Java代码中定义切点。该注解可以被应用在方法上,用于标识这个方法是一个切点。切点的名称可以通过注解的参数来指定,如果不指定,则使用方法的签名作为切点的名称。切点的表达式可以通过注解的value属性来指定。 切点表达式可以使用AspectJ的语法,包括类名、方法名、参数类型、返回类型等。切点表达式可以很灵活地表示各种匹配规则,例如匹配特定类的所有方法,匹配特定方法名的所有方法,或者匹配满足一定条件的方法等。 使用org.aspectj.lang.annotation.pointcut注解定义的切点,可以被其他的切面引用和应用。通过在切面中使用切点表达式来选择合适的切点,开发者可以将切面应用到指定的连接点上,实现特定的横切关注点。 总之,org.aspectj.lang.annotation.pointcut是AspectJ中用于定义切点的注解。通过使用这个注解,开发者可以在Java代码中轻松地定义切点表达式,实现对指定连接点的选择和拦截。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值