SAP BOPF 和 Spring 框架里加了注解的控制器是如何被调用的

举报
汪子熙 发表于 2022/03/12 22:59:00 2022/03/12
【摘要】 BOPF的这些determination,其方法不需要application developer自己去调用,而是被BOPF框架通过调用interface method的方式被调用。Spring MVC的@RequestMapping工作原理类似,但实现方式稍稍高级点,用的是Java的反射。ProductPageController这个类的productDetail方法加上了@RequestM...

BOPF的这些determination,其方法不需要application developer自己去调用,而是被BOPF框架通过调用interface method的方式被调用。
Spring MVC的@RequestMapping工作原理类似,但实现方式稍稍高级点,用的是Java的反射。

ProductPageController这个类的productDetail方法加上了@RequestMapping, 参数是:

当我点了product list上某个product的image想进入detail page时:

这个包含了p的url就会被Spring MVCdelegate到我通过@RequestMapping注册的controller class上。从debugger里能看出我的controller class已经被成功地determine出来了。所以从本质上讲,@RequestMapping和在ABAP里常用的把CLAS名字配到表里的方法其目的都一样:注册,只是Annotation更加优雅和简便一点而已。

扫描原理见我博客:
A simulation of Java Spring dependency injection annotation @Inject in ABAP.
How does component-scan work in Spring Framework
How does @Autowired work in Spring framework
要执行的方法名字在这:

最后这个方法通过反射在line 497行被调用。

Java和ABAP反射机制的区别

注意在Java里,每个类的每个方法的元数据都可以被sun.reflect.MethodAccessor的一个实例来描述,而ABAP里反射的granularity只到Class level,只有CL_ABAP_CLASSDESCR,没有CL_ABAP_CLASS_METHODDESCR!

CRM

按F2就能看到页面的technical data, 就能找到当前页面是哪一个BSP component实现的:

C4C

也能看见technical data

Hybris

比如这个product detail page,我想知道是哪个JSP文件实现的?
问了成都Hybris开发同事,答案是没有,得自己找。 囧

找到product detail page:

双击进去:
找到这个product detail page的明细:

用类似ABAP的思路:SE16查表:
select * from {PageTemplate} where {name} = ‘Product Details Page Template’

查出来6条记录,根据last modify判断出是最后一条:

路径如下:

完整路径如下:C:\Hybris\6.5.0.0.23546\hybris\bin\ext-template\yacceleratorstorefront\web\webroot\WEB-INF\views\responsive\pages\product

另一种方法是打开这个文件:

里面一样有jsp文件的名称。

两种方式都非常不直观,没有WebUI的F2方便。

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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