当前位置: 首页 > news >正文

什么网站可以做平面赚钱网络推广靠谱吗

什么网站可以做平面赚钱,网络推广靠谱吗,网站优化软件,网站前端与后台必须同时做吗文章目录 初步实现通知执行顺序 各个通知获取细节信息重用切点表达式切点表达式语法细节环绕增强切面的优先级没有接口的情况基于XML的AOP[了解] 初步实现 先导入Spring和Junit4的依赖 <dependency><groupId>org.springframework</groupId><artifactId&g…

文章目录

  • 初步实现
    • 通知执行顺序
  • 各个通知获取细节信息
  • 重用切点表达式
  • 切点表达式语法细节
  • 环绕增强
  • 切面的优先级
  • 没有接口的情况
  • 基于XML的AOP[了解]

初步实现

先导入Spring和Junit4的依赖

        <dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.11.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.2.11.RELEASE</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency>

导入AOP的依赖

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

在Spring的配置文件中开启包扫描和AOP注解

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd"><context:component-scan base-package="com.iflytek"></context:component-scan><!-- 开启基于注解的AOP功能 --><aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>

也可以通过配置类开启

@Configuration
@ComponentScan(basePackages = "com.iflytek")
@EnableAspectJAutoProxy
public class MyConfig {
}

创建接口

public interface Calculator {int add(int i, int j);int sub(int i, int j);int mul(int i, int j);int div(int i, int j);}

创建实现类实现这个接口:

@Component
public class CalculatorPureImpl implements Calculator{@Overridepublic int add(int i, int j) {int result = i + j;System.out.println("方法内部 result = " + result);return result;}@Overridepublic int sub(int i, int j) {int result = i - j;System.out.println("方法内部 result = " + result);return result;}@Overridepublic int mul(int i, int j) {int result = i * j;System.out.println("方法内部 result = " + result);return result;}@Overridepublic int div(int i, int j) {int result = i / j;System.out.println("方法内部 result = " + result);return result;}
}

定义切面类

/*** 切面类*/
// @Aspect表示这个类是一个切面类
@Aspect
// @Component注解保证这个切面类能够放入IOC容器
@Component
public class LogAspect {// @Before注解:声明当前方法是前置通知方法// value属性:指定切入点表达式,由切入点表达式控制当前通知方法要作用在哪一个目标方法上@Before(value = "execution(public int com.iflytek.Calculator.add(int,int))")public void printLogBeforeCore() {System.out.println("[AOP前置通知] 方法开始了");}@AfterReturning(value = "execution(public int com.iflytek.Calculator.add(int,int))")public void printLogAfterSuccess() {System.out.println("[AOP返回通知] 方法成功返回了");}@AfterThrowing(value = "execution(public int com.iflytek.Calculator.add(int,int))")public void printLogAfterException() {System.out.println("[AOP异常通知] 方法抛异常了");}@After(value = "execution(public int com.iflytek.Calculator.add(int,int))")public void printLogFinallyEnd() {System.out.println("[AOP后置通知] 方法最终结束了");}}

测试:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:ApplicationContext.xml")
public class testClass {@Autowiredprivate Calculator calculator;//这里一定要导入接口,而非实现类@Testpublic void test01(){calculator.add(1,2);}
}

运行结果:

[AOP前置通知] 方法开始了
方法内部 result = 3
[AOP返回通知] 方法成功返回了
[AOP后置通知] 方法最终结束了

通知执行顺序

  • Spring版本5.3.x以前:
    • 前置通知(@Before)
    • 目标操作
    • 后置通知(@After)
    • 返回通知或异常通知(@AfterReturing/@AfterThrowing)
  • Spring版本5.3.x以后:
    • 前置通知(@Before)
    • 目标操作
    • 返回通知或异常通知(@AfterReturing/@AfterThrowing)
    • 后置通知(@After)

各个通知获取细节信息

JoinPoint接口
org.aspectj.lang.JoinPoint

  • 要点1:JoinPoint接口通过getSignature()方法获取目标方法的签名
  • 要点2:通过目标方法签名对象获取方法名
  • 要点3:通过JoinPoint对象获取外界调用目标方法时传入的实参列表组成的数组

在切面类中:

@Aspect
// @Component注解保证这个切面类能够放入IOC容器
@Component
public class LogAspect {// @Before注解:声明当前方法是前置通知方法// value属性:指定切入点表达式,由切入点表达式控制当前通知方法要作用在哪一个目标方法上@Before(value = "execution(public int com.iflytek.Calculator.add(int,int))")public void printLogBeforeCore(JoinPoint joinPoint) {Signature signature = joinPoint.getSignature();//方法名addSystem.out.println("methodName:"+signature.getName());//获取目标方法声明类型(public、private、protected)   1025System.out.println("modifiers:"+signature.getModifiers());// 获取目标方法所属类的类名  com.iflytek.CalculatorSystem.out.println("declaringTypeName:"+signature.getDeclaringTypeName());Object[] args = joinPoint.getArgs();List<Object> list = Arrays.asList(args);System.out.println("参数:");//1,2list.forEach(item->{System.out.println(item);});System.out.println("[AOP前置通知] 方法开始了");}@AfterReturning(value = "execution(public int com.iflytek.Calculator.add(int,int))",returning = "result")//returning  获取方法返回值public void printLogAfterSuccess(Integer result) {System.out.println("[AOP返回通知] 方法成功返回了,返回值为"+result);}@AfterThrowing(value = "execution(public int com.iflytek.Calculator.add(int,int))",throwing = "throwable")//throwing 获取异常信息public void printLogAfterException(Throwable throwable) {System.out.println("[AOP异常通知] 方法抛异常了"+throwable.getClass().getName());}@After(value = "execution(public int com.iflytek.Calculator.add(int,int))")public void printLogFinallyEnd() {System.out.println("[AOP后置通知] 方法最终结束了");}}

重用切点表达式

1、在切面类中声明

    //定义切点@Pointcut(value = "execution(public int com.iflytek.Calculator.add(int,int))")public void pointCut(){}

2、同一个类内部引用

    @Before(value = "pointCut()")public void printLogBeforeCoreOperation(JoinPoint joinPoint) {

3、在不同类中引用
该方法在LogAspect2类中

    @Before(value = "com.iflytek.LogAspect.pointCut()")public Object roundAdvice(ProceedingJoinPoint joinPoint) {}

4、集中管理
而作为存放切入点表达式的类,可以把整个项目中所有切入点表达式全部集中过来,便于统一管理:

@Component
public class PointCuts {@Pointcut(value = "execution(public int *..Calculator.sub(int,int))")public void globalPointCut(){}@Pointcut(value = "execution(public int *..Calculator.add(int,int))")public void secondPointCut(){}@Pointcut(value = "execution(* *..*Service.*(..))")public void transactionPointCut(){}
}

切点表达式语法细节

  • 用开头的*号代替“权限修饰符”和“返回值”部分表示“权限修饰符”和“返回值”不限
  • 在包名的部分,一个“*”号只能代表包的层次结构中的一层,表示这一层是任意的。
    • 例如:*.Hello匹配com.Hello,不匹配com.iflytek.Hello
  • 在包名的部分,使用“*…”表示包名任意、包的层次深度任意
  • 在类名的部分,类名部分整体用*号代替,表示类名任意
  • 在类名的部分,可以使用*号代替类名的一部分
*Service

上面例子表示匹配所有名称以Service结尾的类或接口

  • 在方法名部分,可以使用*号表示方法名任意
  • 在方法名部分,可以使用*号代替方法名的一部分
*Operation

上面例子表示匹配所有方法名以Operation结尾的方法:

  • 在方法参数列表部分,使用(…)表示参数列表任意
  • 在方法参数列表部分,使用(int,…)表示参数列表以一个int类型的参数开头
  • 在方法参数列表部分,基本数据类型和对应的包装类型是不一样的
    • 切入点表达式中使用 int 和实际方法中 Integer 是不匹配的
  • 在方法返回值部分,如果想要明确指定一个返回值类型,那么必须同时写明权限修饰符
execution(public int *..*Service.*(.., int))

上面例子是对的,下面例子是错的:

execution(* int *..*Service.*(.., int))

但是public *表示权限修饰符明确,返回值任意是可以的。

* void 就是错误的
  • 对于execution()表达式整体可以使用三个逻辑运算符号
    • execution() || execution()表示满足两个execution()中的任何一个即可
    • execution() && execution()表示两个execution()表达式必须都满足
    • !execution()表示不满足表达式的其他方法

环绕增强

环绕通知对应整个try…catch…finally结构,包括前面四种通知的所有功能。

    //定义切点@Pointcut(value = "execution(public int com.iflytek.Calculator.add(int,int))")public void pointCut(){}@Around(value = "pointCut()")public void printAround(ProceedingJoinPoint joinPoint){try {//此处相当于前置增强System.out.println("before...");joinPoint.proceed(joinPoint.getArgs());System.out.println("afterReturning...");} catch (Throwable e) {
//            throw new RuntimeException(e);e.printStackTrace();System.out.println("afterThrowing");}finally {//此处相当于后置增强System.out.println("after...");}}

切面的优先级

相同目标方法上同时存在多个切面时,切面的优先级控制切面的内外嵌套顺序。

  • 优先级高的切面:外面
  • 优先级低的切面:里面

在这里插入图片描述

eg:如果 是@Before前置增强,则优先级高的先执行

如果是@After后置增强,则优先级低的先执行

使用@Order注解可以控制切面的优先级:

  • @Order(较小的数):优先级高
  • @Order(较大的数):优先级低

没有接口的情况

在目标类没有实现任何接口的情况下,Spring会自动使用cglib技术实现代理

基于XML的AOP[了解]

将之前用到的AOP的注解都删除
使用xml配置

    <bean id="aspect" class="com.iflytek.LogAspect"></bean><bean id="calculatorPure" class="com.iflytek.CalculatorPureImpl"></bean><aop:config>
<!-- 定义切入点和规则--><aop:pointcut id="pc" expression="execution(public Integer com.iflytek.Calculator.add(int ,int))"/>
<!--切面--><aop:aspect ref="aspect"><aop:before method="printLogBeforeCore" pointcut-ref="pc"></aop:before><aop:after-returning method="printLogAfterSuccess" pointcut-ref="pc" returning="result"></aop:after-returning><aop:after-throwing method="printLogAfterException" pointcut-ref="pc" throwing="throwable"></aop:after-throwing><aop:after method="printLogFinallyEnd" pointcut-ref="pc"></aop:after></aop:aspect></aop:config>

文章转载自:
http://dinncodupery.knnc.cn
http://dinncohousedress.knnc.cn
http://dinncogopi.knnc.cn
http://dinncochronotron.knnc.cn
http://dinncomultiflorous.knnc.cn
http://dinncoinconsistently.knnc.cn
http://dinncochevrette.knnc.cn
http://dinncocentimeter.knnc.cn
http://dinncoaward.knnc.cn
http://dinncodendrometer.knnc.cn
http://dinncolopsidedness.knnc.cn
http://dinncoclairschach.knnc.cn
http://dinncosyllable.knnc.cn
http://dinncotranspierce.knnc.cn
http://dinncoadmirably.knnc.cn
http://dinncoyeah.knnc.cn
http://dinncomacroclimate.knnc.cn
http://dinncointractability.knnc.cn
http://dinncogarbologist.knnc.cn
http://dinncoexpediate.knnc.cn
http://dinncoreplier.knnc.cn
http://dinncocathode.knnc.cn
http://dinncosonya.knnc.cn
http://dinncoinvoluted.knnc.cn
http://dinncoheliologist.knnc.cn
http://dinncoheist.knnc.cn
http://dinncoscience.knnc.cn
http://dinncosemisoft.knnc.cn
http://dinncodilaceration.knnc.cn
http://dinncotailsitter.knnc.cn
http://dinncoparquet.knnc.cn
http://dinncocany.knnc.cn
http://dinncoinexpertise.knnc.cn
http://dinncobulkily.knnc.cn
http://dinncowhisht.knnc.cn
http://dinncounivac.knnc.cn
http://dinncokeratinocyte.knnc.cn
http://dinncoyesman.knnc.cn
http://dinncohinkty.knnc.cn
http://dinncoindemnification.knnc.cn
http://dinncogoosie.knnc.cn
http://dinncoparasitism.knnc.cn
http://dinncohairiness.knnc.cn
http://dinncoregionalize.knnc.cn
http://dinncounfruitful.knnc.cn
http://dinncoshowground.knnc.cn
http://dinncovoivodina.knnc.cn
http://dinncosamos.knnc.cn
http://dinncopolymorphonuclear.knnc.cn
http://dinncousurious.knnc.cn
http://dinncomargravine.knnc.cn
http://dinncoorbiculate.knnc.cn
http://dinncostereo.knnc.cn
http://dinncodexter.knnc.cn
http://dinncogeophysical.knnc.cn
http://dinncoextrascientific.knnc.cn
http://dinncoprotector.knnc.cn
http://dinncoclamer.knnc.cn
http://dinncojoy.knnc.cn
http://dinncohesitancy.knnc.cn
http://dinncoconsonancy.knnc.cn
http://dinncokiplingesque.knnc.cn
http://dinncoentebbe.knnc.cn
http://dinncodrave.knnc.cn
http://dinncoantiauthoritarian.knnc.cn
http://dinncoalleyway.knnc.cn
http://dinncoskeptical.knnc.cn
http://dinncoplasticene.knnc.cn
http://dinncopos.knnc.cn
http://dinncohairclip.knnc.cn
http://dinncoamn.knnc.cn
http://dinncosilverbeater.knnc.cn
http://dinncohypodiploid.knnc.cn
http://dinncolegislatrix.knnc.cn
http://dinnconutmeg.knnc.cn
http://dinncochawl.knnc.cn
http://dinncounrhythmic.knnc.cn
http://dinncoquantivalence.knnc.cn
http://dinncometaphrase.knnc.cn
http://dinncoaequorin.knnc.cn
http://dinncotrachyte.knnc.cn
http://dinncoultramarine.knnc.cn
http://dinncoascertainment.knnc.cn
http://dinncopicescent.knnc.cn
http://dinncoworkaday.knnc.cn
http://dinncopegbox.knnc.cn
http://dinncolighterman.knnc.cn
http://dinncocerotype.knnc.cn
http://dinncocarve.knnc.cn
http://dinncoskewer.knnc.cn
http://dinncodeclarative.knnc.cn
http://dinncobluesy.knnc.cn
http://dinncodank.knnc.cn
http://dinncobufflehead.knnc.cn
http://dinncosommelier.knnc.cn
http://dinncoscleroprotein.knnc.cn
http://dinncofeoffee.knnc.cn
http://dinncofanatically.knnc.cn
http://dinncostraiten.knnc.cn
http://dinncoseptimus.knnc.cn
http://www.dinnco.com/news/161447.html

相关文章:

  • 古典 网站 模板广告营销公司
  • wordpress搭建单机版新网seo关键词优化教程
  • 可以做公众号背景图的网站广告图片
  • 网站推广的基本方法是什么2022年关键词排名
  • 网站建设销售秘籍seo关键词
  • 重庆南川网站制作公司哪家好怎么推广平台
  • 临沂网站建设培训百度推广管家
  • 建设证书查询官方网站朝阳区seo技术
  • 遵义微商城网站建设平台百度竞价推广公司
  • 小红书推广价格重庆seo推广公司
  • 佛山网站建设科技公司手机端关键词排名免费软件
  • wordpress 签到 插件厦门谷歌seo
  • 网站做盗版视频赚钱吗sem是什么基团
  • 织梦做商城类网站教程网站模板建站公司
  • 大连模板做网站百度有几种推广方式
  • 怎么改网站模块抖音seo推荐算法
  • 凯发网站seo策略是什么意思
  • 怎样建设个人网站网推技巧
  • 小学老师在哪个网站做ppt腾讯广告投放推广平台价格
  • 泰州网站建设工作什么是优化
  • 网站关键词优化seo如何设置友情链接
  • 网络推广平台排行前十名seo建站还有市场吗
  • 做网站端口映射百度云怎么找资源
  • 雨发建设集团有限公司网站网站运营工作内容
  • 婚纱摄影网站制作免费观看行情软件网站下载
  • 公司是否可以做多个网站seo网站推广全程实例
  • 广告网眼布seo是谁
  • 网上哪里可以免费学编程公司优化是什么意思
  • 图片网站源码asp能去百度上班意味着什么
  • 1元网站建设精品网站制作自己动手建立个人网站