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

网站建设电话销售技巧销型网站建设必须的步骤包括

网站建设电话销售技巧,销型网站建设必须的步骤包括,wordpress 不更新,自己设计logo的软件1. aop作用 AOP意为面向切面编程#xff0c;可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。 AOP的编程思想是把对类对象的横切问题点#xff0c;从业务逻辑中分离出来#xff0c;从而达到解耦的目的#xff0c;增加代码…1. aop作用 AOP意为面向切面编程可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。 AOP的编程思想是把对类对象的横切问题点从业务逻辑中分离出来从而达到解耦的目的增加代码的复用性提高开发效率。 2. 相关注解 Component 将当前类注入到Spring容器内。 Aspect 表明当前类是一个切面类。 Before 前置通知在被切入方法执行之前执行。 After 后置通知在被切入方法执行之后执行。 AfterRuturning 返回通知在被切入方法返回结果之后执行。使用此注解的方法可以使用returning XXX返回被切入方法的返回值XXX即为被切入方法的返回值本例中是controller类中方法的返回值。 //返回通知 AfterReturning(returning ret, pointcut log()) public void doAfterReturning(Object ret) throws Throwable {// 处理完请求返回内容System.out.println(返回通知方法的返回值 : ret); }AfterThrowing 异常通知在被切入方法抛出异常之后执行。在此注解中可以使用throwing XXX获取异常信息获取的异常信息可以在方法中打印出来举例如下。 / /异常通知 AfterThrowing(throwing ex, pointcut log()) public void throwss(JoinPoint jp, Exception ex) {System.out.println(异常通知方法异常时执行.....);System.out.println(产生异常的方法 jp);System.out.println(异常种类 ex); }Around 环绕通知围绕着被切入方法执行。参数必须为ProceedingJoinPointpjp.proceed相应于执行被切面的方法。环绕通知一般单独使用环绕通知可以替代上面的四种通知后面单独介绍。 Pointcut 切入点PointCut切入点表达式有很多种其中execution用于使用切面的连接点。 注意 返回通知和异常通知只能有一个会被执行因为发生异常执行异常通知然后就不会继续向下执行自然后置通知也就不会被执行反之亦然。 后置通知一定会执行。 3. Aop 相关概念 Joinpoint(连接点)所谓连接点是指那些被拦截到的点在 spring 中这些点指的是方法因为 spring 只支持方法类型的连接点通俗的说就是被增强类中的所有方法。注意 除了环绕通知外其他的四个通知注解中加或者不加参数JoinPoint都可以如果有用到JoinPoint的地方就加用不到就可以不加。JoinPoint里包含了类名、被切面的方法名参数等属性。 PointCut(切入点)所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义通俗的说就是被增强类中的被增强的方法因为被增强类中并不是所有的方法都被增强了。 Advice(通知/增强)所谓通知是指拦截到 Joinpoint 被增强的方法之后所要做的事情就是通知通俗的说就是对被增强的方法进行增强的代码 Aspect(切面)是切入点和通知引介的结合通俗的说就是建立切入点和通知方法在创建时的对应关系。 4. 切入点表达式详解PointCut(表达式) PointCut切入点指哪些方法需要被执行AOPPointCut表达式可以有一下几种方式 execution表达式 表达式语法访问修饰符 返回值 包名.包名.包名…类名.方法名(参数列表) 标准的表达式写法范例 public void com.aismall.testaop.controller.HelloController.helloAop()访问修饰符可以省略 void com.aismall.testaop.controller.HelloController.helloAop()返回值可以使用通配符*表示任意返回值 * com.aismall.testaop.controller.HelloController.helloAop()包名可以使用通配符表示任意包但是有几级包就需要写几个*. * *.*.*.*.HelloController.helloAop()包名可以使用…表示当前包及其子包 * *...HelloController.helloAop()类名和方法名都可以使用*来实现通配 * *..*.*()表达式中的参数列表可以直接写数据类型 基本类型直接写名称 例如int 引用类型写包名.类名的方式 例如java.lang.String 可以使用通配符表示任意类型但是必须有参数 可以使用…表示有无参数均可有参数可以是任意类型 全通配写法 ….*(…) 2.within表达式 是用来指定类型的指定类型中的所有方法将被拦截 表达式包名.包名.包名…类名 标准的表达式写法范例 com.aismall.testaop.controller.HelloController举例匹配HelloController类对应对象的所有方法并且只能是HelloController类生成的对象不能是它的子类生成的对象。 within(com.aismall.testaop.controller.HelloController)也可以使用通配符*匹配com.aismall包及其子包下面的所有类的所有方法。 within(com.aismall…*)this(type) SpringAOP是基于代理的this就代表代理对象语法是this(type)当生成的代理对象可以转化为type指定的类型时表示匹配。 this(com.aismall.testaop.controller.HelloController)匹配生成的代理对象是HelloController类型的所有方法的外部调用 target SpringAOP是基于代理的target表示被代理的目标对象当被代理的目标对象可以转换为指定的类型时则表示匹配。 target(com.aismall.testaop.controller.HelloController) 匹配所有被代理的目标对象能够转化成HelloController类型的所有方法的外部调用。 args: args用来匹配方法参数 args() 匹配不带参数的方法 args(java.lang.String) 匹配方法参数是String类型的 args(…) 带任意参数的方法 args(java.lang.String,…) 匹配第一个参数是String类型的其他参数任意。最后一个参数是String的同理。 annotation: 带有相应注解的方法比如对标有Transactional注解的方法进行增强 annotation(org.springframework.transaction.annotation.Transactional)within和target针对类的注解 annotation针对方法的注解 args: 参数带有相应标注的任意方法比如Transactional args(org.springframework.transaction.annotation.Transactional)5. 代码实战 使用execution(表达式) 创建一个aspect切面类 Aspect Component public class MyAop {//切入点待增强的方法Pointcut(execution(public * com.xxx.controller.*.*(..)))//切入点签名public void log(){System.out.println(pointCut签名。。。);}//前置通知Before(log())public void deBefore(JoinPoint jp) throws Throwable {// 接收到请求记录请求内容ServletRequestAttributes attributes (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request attributes.getRequest();// 记录下请求内容System.out.println(URL : request.getRequestURL().toString());System.out.println(HTTP_METHOD : request.getMethod());System.out.println(CLASS_METHOD : jp);System.out.println(ARGS : Arrays.toString(jp.getArgs()));}//返回通知AfterReturning(returning ret, pointcut log())public void doAfterReturning(Object ret) throws Throwable {// 处理完请求返回内容System.out.println(返回通知方法的返回值 : ret);在这里插入代码片}//异常通知AfterThrowing(throwing ex, pointcut log())public void throwss(JoinPoint jp,Exception ex){System.out.println(异常通知方法异常时执行.....);System.out.println(产生异常的方法jp);System.out.println(异常种类ex);}//后置通知After(log())public void after(JoinPoint jp){System.out.println(后置通知最后且一定执行.....);} } 创建controlle RestController public class HelloController {RequestMapping(/helloAop)public Object hello(){return hello aop;}RequestMapping(/helloError)public Object helloError(){return 1/0;} } 测试 6. 代码实战 使用annotation 自定义注解 //表示次注解可以标注在类和方法上 Target({ElementType.METHOD, ElementType.TYPE}) //运行时生效 Retention(RetentionPolicy.RUNTIME) public interface MyLogAnnotation {//定义一个变量可以接受参数String desc() default ; } 切面类 Aspect Component public class MyAopAnnotation {//切入点增强标有MyLogAnnotation注解的方法Pointcut(valueannotation(com.aismall.testaop.MyAnnotation.MyLogAnnotation))//切入点签名public void logAnnotation(){System.out.println(pointCut签名。。。);}//前置通知Before(logAnnotation())public void deBefore(JoinPoint jp) throws Throwable {// 接收到请求记录请求内容ServletRequestAttributes attributes (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request attributes.getRequest();// 记录下请求内容System.out.println(URL : request.getRequestURL().toString());}//返回通知AfterReturning(returning ret, pointcut logAnnotation())public void doAfterReturning(Object ret) throws Throwable {// 处理完请求返回内容System.out.println(返回通知方法的返回值 : ret);}//异常通知AfterThrowing(throwing ex, pointcut logAnnotation())public void throwss(JoinPoint jp,Exception ex){System.out.println(异常通知方法异常时执行.....);System.out.println(产生异常的方法jp);System.out.println(异常种类ex);}//后置通知After(logAnnotation())public void after(JoinPoint jp){System.out.println(后置通知最后且一定执行.....);} } Controller类 RequestMapping(helloAnnotation) //标有这个注解的方法会被增强 MyLogAnnotation(desc Annotation) public Object helloAnnotation() {return hello annotation; }
http://www.zqtcl.cn/news/387430/

相关文章:

  • 百度推广让我先做虚拟网站后进一步优化落实
  • 好的网站建设启示汕头网页设计网站方案
  • 深圳网站制作开发免费精准客户软件
  • 网站超链接用什么南宁行业平台开发公司
  • 注册门户网站襄樊seo快速排名
  • 优秀的手机网站iis 设置此网站的访问权限
  • 用nat123做自己的网站深圳市建设工程质量检测中心官网
  • 网上做衣服的网站废旧网站哪个做的最好
  • 网站开发设置网页端口wordpress 知识库
  • 网站建设的方法有四种开发一款新闻app需要多少钱
  • 成都网站建站公司2023年防疫新政策
  • 17做网店一样的网站十大互联网培训机构
  • 中企网络科技建站施工企业oa办公系统
  • 成都网站推广公司排名淘宝商家网站建设
  • 平台网站建设报价网站建设企业蛋糕
  • 上海创意网站建设电子商务毕业设计网站建设
  • 如何让网站打不开 解析wordpress pdf检索
  • 网站建设大作业感想台州企业网站模板建站
  • 淄博网站的优化上海营销网站建站公司
  • 长春网站建设硕成传媒长春电商网站建设哪家好
  • 舟山建设管理网站手表交易网站
  • 如何电话推销客户做网站沉浸式展厅搭建商
  • 重庆网站建设开发e福州官方网站
  • 网站怎么可以被收录广州网站建设全包
  • 网站备案期间如何采购需求网站建设
  • 东莞seo网站优化运营南通网站排名外包
  • 新能源网站建设唐山专业网站建设公司
  • 石基网站建设临沂网站优化哪家好
  • 用node.js可以做网站吗上海做网站 公司有哪些
  • 淄博网站建设详细策划一个域名解析多个网站