spring 不会自动去寻找注解,必须告诉 spring 哪些包下的类中可能有注解,也就是要开启注解扫描,注解的包是spring-context.jar,所以在配置文件中还要引入context约束,也就是引入 xmlns:context命名空间
第一步开始注解,base-package的属性值指定哪些包下可能有注解,多个包用逗号隔开,也可以采用通配符进行配置
<!-- 开启注解 --> <context:component-scan base-package="com.airplan.pojo,com.airplan.bean"></context:component-scan> <!-- AOP的注解方式都是采用cglib动态代理 proxy-target-class="true"代表采用cglib动态代理 false代表使用jdk的动态代理 --> <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
第二步:对要注册到spring器的类打上注解,例如@Service,@Component等
@Component 相当于<bean/>,如果没有参数,把类名首字母变小写,相当于<bean id=””/>,也可以@Component(“自定义名称”)
我们对通知类,以及切点所在的类要打上注解
切点类:在方法上添加@Pointcut(“”) 定义切点
package com.airplan.pojo; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; @Component("pointCutClass") public class PointCutClass { /** * 声明切点 * @param name01 */ @Pointcut("execution(* com.airplan.pojo.PointCutClass.*(..))") public void pointCutFun() { System.out.println("切点执行"); } }
通知类:@Aspect 相当于<aop:aspect/>表示通知方法在当前类中,
@Before("com.bjsxt.test.Demo.demo1()")注解代表当前方法是前置通知,@Before注解中的值时切点的全路径
package com.airplan.pojo; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.springframework.stereotype.Component; @Component("advice") @Aspect public class Advice { @Before("com.airplan.pojo.PointCutClass.pointCutFun()") public void mybefore(String name){ System.out.println("前置"+name ); System.out.println("before"); } }
原文地址:https://www.cnblogs.com/cplinux/p/9742096.html
时间: 2024-10-09 08:11:46