在用微信插件的时候,发现路由不知道在哪里加载进去,然后就可以直接使用。
@Override public void refreshRouter() { final WxMpMessageRouter newRouter = new WxMpMessageRouter( this.wxMpService); // 记录所有事件的日志 newRouter.rule().handler(this.logHandler).next(); /*// 关注事件 newRouter.rule().async(false).msgType(WxConsts.XML_MSG_EVENT) .event(WxConsts.EVT_SUBSCRIBE).handler(this.subscribeHandler) .end(); //取消关注事件 newRouter.rule().async(false).msgType(WxConsts.XML_MSG_EVENT) .event(WxConsts.EVT_UNSUBSCRIBE).handler(this.unsubscribeHandler) .end(); //用户点击菜单推送事件 newRouter.rule().async(false).msgType(WxConsts.XML_MSG_EVENT) .event(WxConsts.BUTTON_CLICK).handler(this.clickHandler) .end();*/ //用户输入文本消息 newRouter.rule().async(false).msgType(WxConsts.XML_MSG_TEXT) .handler(this.serviceHandler) .end(); //模板推送后微信服务器返回是否送达成功信息 newRouter.rule().async(false).msgType(WxConsts.XML_MSG_EVENT) .event(WxConsts.EVT_TEMPLATESENDJOBFINISH).handler(this.templateSendHandler) .end(); // 默认,转发消息给客服人员 newRouter.rule().async(false).handler(this.msgHandler).end(); this.router = newRouter; }发现在一个init方法上执行了一次,但是没有调用init方法,该方法上有@PostConstruct
@PostConstruct public void init() { this.refreshRouter(); }被@PostConstruct修饰的方法会在服务器加载Servle的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。PreDestroy()方法在destroy()方法执行执行之后执行
//写法一 @PostConstruct Public void test() {} //写法二 public @PostConstruct void test(){}涉及到web.xml执行顺序
Constructor -> @Autowired -> @PostConstruct
服务器加载Servlet->Servlet构造函数->PostConstruct->Init->Service->destory->PreDestory->服务器卸载Servlet完毕
在servlet初始化加载之前想处理一些东西,像加载缓存,数据字典,需要提前加载的方法等等。
