spring aspect自动代理技术

举报
泽宇-Li 发表于 2020/10/27 19:29:46 2020/10/27
【摘要】 因为xml配置aop太过繁琐,所以aopalliance 中出现了一种AspectJ技术。基本流程:1)通过注解配置切点2)自动生产代理对象怎么使用aspect技术第1步:创建AppConfig.javapackage com.jr.aspectJ;import org.springframework.context.annotation.ComponentScan;import org.s...

因为xml配置aop太过繁琐,所以aopalliance 中出现了一种AspectJ技术。
基本流程:
1)通过注解配置切点
2)自动生产代理对象

怎么使用aspect技术

第1步:创建AppConfig.java

package com.jr.aspectJ;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.EnableAspectJAutoProxy;@Configuration    //标示为配置类 相当于xml文件//扫描指定包下包含@Component注解的类,将这个类加入spring bean工程@ComponentScan(value= {"com.jr.aspectJ","com.jr.dao.impl"})@EnableAspectJAutoProxy//启动aspectJ注解aoppublic class AppConfig {
	}123456789101112

第2步:创建@Aspect 切面类

package com.jr.aspectJ;import java.util.Arrays;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.springframework.stereotype.Component;@Component@Aspect  //aspect注解public class LogAspect {
	//切点
	@Pointcut("execution(public int com.jr.dao.impl.ScoreDaoImpl.abc(..))")
	public void pointCut() {}
	
	//环绕通知
	@Around("pointCut()")
	public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("1.鉴权");
        //调用目标方法
        Object result = joinPoint.proceed();
        System.out.println("1.日志留痕");
        return result;
    }
	//@Before在调用目标方法之前切入;切入点表达式(指定在哪个方法切入)
    @Before("execution(public int com.jr.dao.impl.ScoreDaoImpl.minus(..) )")
    public void logStart(JoinPoint joinPoint){
        Object[] args = joinPoint.getArgs();
        System.out.println(""+joinPoint.getSignature().getName()+"运行。。。@Before:参数列表是:{"+Arrays.asList(args)+"}");
    }}1234567891011121314151617181920212223242526272829303132

第3步:测试

package com.jr.proxy;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.jr.aspectJ.AppConfig;import com.jr.dao.impl.ScoreDaoImpl;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes=AppConfig.class)public class AspectTest {
	@Autowired
	ScoreDaoImpl scoreDao;
	@Test
	public void TestscoreDao() {
		System.out.println(scoreDao.abc(3, 4));
		System.out.println(scoreDao.minus(3, 4));
	}}


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。