【JPress】core&web(1)

2021SC@SDUSC

目录

2021SC@SDUSC

一、web.interceptor

1.interceptor简介

2.interceptor中的常见错误

二、core.wechat

1.WechatAddonManager

2.WechatAddonConfig&WechatAddonInfo

3.WechatAddon


一、web.interceptor

1.interceptor简介

Interceptor 可以对方法进行拦截,并提供机会在方法的前后添加切面代码,实现 AOP 的核心目标。Interceptor 接口仅仅定义了一个方法 public void intercept(Invocation inv)。

以上代码中的 DemoInterceptor 将拦截目标方法,并且在目标方法调用前后进行自定义的操作。inv.invoke() 这一行代码是对目标方法的调用,在这一行代码的前后插入切面代码可以很方便地实现AOP。注意必须调用 inv.invoke() 方法,才能将当前调用传递到后续的 Interceptor 与 Action。

2.interceptor中的常见错误

确保调用 inv.invoke() 方法。一般来说,常见错误有如下:目前为止仍有很多同学忘了调用 inv.invoke() 方法,造成 controller 中的 action 不会被执行。在此再次强调一次,一定要调用一次 inv.invoke(),除非是刻意不去调用剩下的拦截器与 action,这种情况仍然需要使用 inv.getController().render()/renderJson() 调用一下相关的 render() 方法为客户端响应数据。

注意保护Interceptor 中的属性。Interceptor 是全局共享的,所以如果要在其中使用属性需要保证其属性是线程安全的。Interceptor 类的属性将会被多线程访问到,从而引发线程安全问题。一般来说,Interceptor 的属性大部分使用public static final String 来定义就行。

二、core.wechat

core.wechat为JPress核心包下处理微信业务的插件。

1.WechatAddonManager

WechatAddonManager类实现了JbootEventListener接口。WechatAddonManager类本身使用饿汉式单例

WechatAddonManager在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。

好处是没有线程安全的问题,坏处是浪费内存空间。浪费内存空间是因为一开始就实例化了,系统资源开销大。

WechatAddonManager主要的功能是对插件(所有插件、已经启用的插件)的管理。在微信插件管理器中有增、添、改、查、关闭、开启插件方法。

2.WechatAddonConfig&WechatAddonInfo

微信插件的注解。定义如下:

@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface WechatAddonConfig {
​
    String id();
​
    String title();
​
    String description() default "";
​
    String author() default "";
​
    String authorWebsite() default "";
​
    String version() default "v1.0.0";
​
    int versionCode() default 1;
​
}

@Inherited:子类的声明部分也能自动拥有该注解。@Inherited注解只对那些@Target被定义为ElementType.TYPE的自定义注解起作用。

@Target({ElementType.TYPE}):类,接口(包括注解类型)或枚举的声明

@Retention(RetentionPolicy.RUNTIME):注解将被编译器记录在class文件中,而且在运行时会被虚拟机保留,因此它们能通过反射被读取到

WechatAddonInfo类的属性与微信插件的注解一致,用于存储微信插件对象。

3.WechatAddon

WechatAddon定义了微信插件的接口,实现该接口的插件类都要重写一下俩方法:onMatchingMessage、onRenderMessage。用来匹配是否由该插件执行以及执行回复逻辑。

public interface WechatAddon {
​
    public boolean onMatchingMessage(InMsg inMsg, MsgController msgController);
​
    public boolean onRenderMessage(InMsg inMsg, MsgController msgController);
​
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值