您的位置:首页 > 游戏 > 游戏 > 社会化网络营销是什么_网络技术有限公司是什么_关键词排名怎么查_百度推广产品有哪些

社会化网络营销是什么_网络技术有限公司是什么_关键词排名怎么查_百度推广产品有哪些

2024/10/5 23:28:11 来源:https://blog.csdn.net/a827143452/article/details/142365529  浏览:    关键词:社会化网络营销是什么_网络技术有限公司是什么_关键词排名怎么查_百度推广产品有哪些
社会化网络营销是什么_网络技术有限公司是什么_关键词排名怎么查_百度推广产品有哪些

1.简介

Spring AOP是Spring针对面向切面编程的落地方案,用于解决非核心代码的冗余问题。
Spring AOP只能运用于存于IoC容器中的对象。

2.知识

2.1 底层实现

Spring AOP框架针对不同情况有两种底层实现基于Jdk的动态代理和基于cglib:

  • 动态代理:用于有接口的类,采用继承接口的方式实现代理。
  • cglib:用于没有接口的类,采用继承子类的方式实现代理。

2.2 插入点

Spring AOP框架总共有5种插入点:

  • 前置通知@Before: 目标函数执行前执行
  • 返回通知@AfterReturning:目标函数执行后执行
  • 异常通知@AfterThrowing:catch中执行
  • 后置通知@After:finally中执行
  • 环绕通知@Around:包含上面所有通知节点,完全自定义

3.代码

要使用Spring AOP,必须加入以下组件到pom.xml中

<dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>6.0.6</version>
</dependency>

配置类中开启AOP

@Configuration//声明这是一个配置类
@ComponentScan("com.jojo")//设置扫描范围
@EnableAspectJAutoProxy//开启AOP
public class JavaConfig {
}

切面增强类的编写:

@Component//增强类必须放入IoC容器
@Aspect//声明切面
@Order(2)//设置优先级,值越小,优先级越高,前置先执行,后置后执行
public class LogAdvice {@Before("com.jojo.pointcut.MyPointCut.point()")public void before(JoinPoint joinPoint){//目标方法的封装对象//1.获取的类名String simpleName = joinPoint.getTarget().getClass().getSimpleName();//2.获取方法名称int modifiers = joinPoint.getSignature().getModifiers();String s = Modifier.toString(modifiers);//获取是public还是其他String name = joinPoint.getSignature().getName();//获取方法名//3.获取参数列表Object[] args = joinPoint.getArgs();//获取参数}@AfterReturning(value = "com.jojo.pointcut.MyPointCut.point()",returning = "result")//接受核心函数返回变量到resultpublic void afterReturning(JoinPoint joinPoint, Object result){//设置返回变量}@After("com.jojo.pointcut.MyPointCut.point()")public void after(JoinPoint joinPoint){}@AfterThrowing(value = "execution(* com..impl.*.*(..))",throwing = "throwable")//接受异常信息到throwablepublic void afterThrowing(JoinPoint joinPoint,Throwable throwable){//设置异常信息变量}@Around("com.jojo.pointcut.MyPointCut.point()")//声明环绕通知public Object transaction(ProceedingJoinPoint joinPoint) throws Throwable {System.out.println("前置通知");//增强代码,前置通知Object[] args = joinPoint.getArgs();//目标参数获取System.out.println("返回通知");//增强代码,返回通知Object result = null;try {result = joinPoint.proceed(args);//目标函数调用} catch (Throwable e){System.out.println("异常通知");//增强代码,异常通知throw new RuntimeException(e);//抛出异常} finally{System.out.println("后置通知");//增强代码,后置通知}return result;//目标方法的返回值}
}

插入点类的编写

@Component
public class MyPointCut {@Pointcut("execution(* com.jojo.service.impl.*.*(..))")//插入点统一管理public void point(){}
}

测试:

@SpringJUnitConfig(value = JavaConfig.class)//声明使用的配置类
public class SpringAopTest {@Autowired//针对有接口类必须使用接口而非接口实现类来声明//针对无接口类使用实现类来声明private MyTest myTest;@Testpublic void test(){int result = myTest.do(1);System.out.println("result = "+ result);}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com