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

品牌官方网站建设快速排名优化系统

品牌官方网站建设,快速排名优化系统,企业做网站用dedeCMS免费吗,沧州网页重做AOP(Aspect Oriented Programming面向切面编程)可以很轻松的控制一个方法调用哪些类,也能够控制哪些方法允许被调用,一般来说切面编程(比如AspectJ)只能控制到方法级别,不能实现代码级别的植入(Weave),比如一个方法被类A的m1方法调用时返回1,在类B的m2方法调用时返回0(同参数的…

AOP(Aspect Oriented Programming面向切面编程)可以很轻松的控制一个方法调用哪些类,也能够控制哪些方法允许被调用,一般来说切面编程(比如AspectJ)只能控制到方法级别,不能实现代码级别的植入(Weave),比如一个方法被类A的m1方法调用时返回1,在类B的m2方法调用时返回0(同参数的情况下),这就要求被调用者具有识别调用者的能力.在这种情况下,可以使用Throwable获得栈信息,然后鉴别调用者并分别输出,代码如下:

 1 public class Client {
 2     public static void main(String[] args) {
 3         Invoker.m1();
 4         Invoker.m2();
 5     }
 6 
 7 }
 8 
 9 class Foo {
10     public static boolean m() {
11         // 取得当前栈信息
12         StackTraceElement[] sts = new Throwable().getStackTrace();
13         // 检查是否是m1方法调用
14         for (StackTraceElement st : sts) {
15             if (st.getMethodName().equals("m1")) {
16                 return true;
17             }
18         }
19         return false;
20     }
21 }
22 
23 class Invoker {
24     // 该方法打印出true
25     public static void m1() {
26         System.out.println(Foo.m());
27     }
28 
29     // 该方法打印出false
30     public static void m2() {
31         System.out.println(Foo.m());
32     }
33 }

Invoker类,两个方法m1和m2都调用了Foo的m方法,都是无参调用,返回值却不相同.这是因为Throwable类发挥效能了.

JVM在创建一个Throwable类及其子类时会把当前线程的栈信息记录下来,以便在输出异常时准确定位异常原因,看Throwable的源代码...

public class Throwable implements Serializable {//出现异常的栈记录private StackTraceElement[] stackTrace;//默认的构造函数public Throwable() {//记录栈帧
        fillInStackTrace();}//本地方法,抓取执行时的栈信息public synchronized native Throwable fillInStackTrace() {}
}

出现异常时(或主动声明一个Throwabke对象时),JVM会通过fillInStackTrace方法记录下栈帧信息,然后生成一个Throwable对象,这样我们就可以知道类间的调用顺序,方法名称以及当前行号等了.

获得栈信息可以对调用者进行判断,然后决定不同的输出,比如上面的m1和m2方法,同样是输入参数,同样的调用方法,但是输出却不同,这看起来像一个Bug:方法m1电泳m方法是正常显示,而方法m2调用却返回错误数据.

因此我们虽然可以依据调用者不同产生不同的逻辑,但这仅仅局限在对方法的广泛认知上.

更多的时候我们用m方法的变形体代码如下:

 1 public class Client {
 2     public static void main(String[] args) {
 3         Invoker.m1();
 4         Invoker.m2();
 5     }
 6 
 7 }
 8 
 9 class Foo {
10     public static boolean m() {
11         // 取得当前栈信息
12         StackTraceElement[] sts = new Throwable().getStackTrace();
13         // 检查是否是m1方法调用
14         for (StackTraceElement st : sts) {
15             if (st.getMethodName().equals("m1")) {
16                 return true;
17             }
18         }
19         throw new RuntimeException("除m1方法外,该方法不允许其他方法调用");
20     }
21 }
22 
23 class Invoker {
24     // 该方法打印出true
25     public static void m1() {
26         System.out.println(Foo.m());
27     }
28 
29     // 该方法打印出false
30     public static void m2() {
31         System.out.println(Foo.m());
32     }
33 }

只是把return false 替换成了一个运行期异常,除了m1方法外,其他方法调用都会产生异常.除了m1方法外,其他方法调用都会产生异常,该方法常用作离线注册码校验,当破解者试图暴力破解时,由于主执行者不善期望的值,因此会返回一个经过包装和混淆的异常信息,大大增加了破解的难度.

 

http://www.lbrq.cn/news/2542141.html

相关文章:

  • 网站建设-易速通科技一站式海外推广平台
  • 怎么做企业功能网站友情链接图片
  • 必应收录提交入口邯郸seo优化
  • 房地产新闻最近怎么进行网站关键词优化
  • 网站制作哪家公司好写软文平台
  • 网站开发预算编制常见的搜索引擎
  • 靓号注册网站免费seo推广优化公司哪家好
  • 做网站还是微信小程序百度24小时人工电话
  • 北京网站设计公司哪家公司好互联网
  • wordpress+3.2.1漏洞seo优化技巧有哪些
  • 学校门户网站功能外贸平台排名
  • 咖啡网站建设市场分析一个新产品策划方案
  • 网站地图怎样做绍兴seo公司
  • flash网站设计欣赏seo是什么服
  • 怎样修改网站的主页内容个人如何在百度做广告
  • 网站设计公司合肥网站推广属于哪些
  • 怎么自己做网站制作网站的基本步骤
  • 西安高校网站建设网站友链查询接口
  • 义乌百度推广公司杭州百度快照优化排名
  • 网站怎么样做采集别人网站的文章seowhy教研室
  • 有没有人通过网站建设卖东西的如何制作一个自己的网站
  • 合肥网站建设合肥做网站seo网站快速排名软件
  • 滕州网站建设网站行吗推广文章的步骤
  • 做网站的后台开发需要会些什么求职seo
  • php网站标题修改谷歌浏览器下载安装2022最新版
  • 做任务挣钱网站平台营销策略都有哪些
  • 青岛做网站的公司哪个比较好seo效果分析
  • 商城网站建站系统网络推广图片
  • 工程建设信息都在哪个网站发布服装品牌策划及营销推广方案
  • wordpress加入海报功能福州短视频seo机会
  • Oracle 11g RAC集群部署手册(三)
  • React ahooks——副作用类hooks之useThrottleEffect
  • golang的函数
  • MySQL 性能与优化
  • Android ConstraintLayout 使用详解
  • 零基础构建MCP服务器:TypeScript/Python双语言实战指南