当前位置: 首页 > 工具软件 > JPress > 使用案例 >

【JPress】core&web(1)

乐钱青
2023-12-01

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);
​
}
 类似资料: