Java,for,Web学习笔记(七一):Service和Repository(6)Spring框架中使用Listenerx
Java for Web 学习笔记(七一):Service 和 和 Repository (6 )在 在 Spring 框架中使用 Listener 目的
Listener 是 Servlet 的,不属于 Spring framework,也就是说我们无法在Listener 中主动注入 Spring bean。本学习将解决这个问题。
进一步了解 Spring 的 的 bean 注入
在解决之前,我们先进一步了解 Spring 的注入机制。在 Spring 中,我们可以使用@Inject,@Anwired,@Resource 等方式实现对自动扫描和自动注入。同一 同一上下文环境中,bean 只实例化一次,在不同类中注入的,都是同一个 bean (同一对象)。我们通常在根上下文中进行扫描,即使我们在不同的类中都进行注入,实际是注入的是同一个对象的。
我们将通过小测试来验证这点。
小测试:设置 Service
设置一个简单的 Service,打印对象地址,同时在构造函数中给出 log,看看在哪个阶段进行实例化。
public interface MyTestService {
public void whoAmI(String className);
}
@Service
public class MyTestServiceImpl implements MyTestService{
private static final Logger log = LogManager.getLogger();
public MyTestServiceImpl(){
log.info("MyTestServiceImpl instance is created, address is " + this);
}
@Override
public void whoAmI(String className) {
log.info("{} : {}" , className,this);
}
}
小测试:注入该 Service
在 AuthenticationController 中
@Controller
public class AuthenticationController {
@Inject private AuthenticationService authenticationService;
@RequestMapping(value="login",method=RequestMethod.GET)
public ModelAndView login(Map<String,Object> model,HttpSession session){
myTestService.whoAmI(this.getClass().getName());
... ...
}
... ...
}
在 TicketController 中 @Controller
@RequestMapping("ticket")
public class TicketController {
@Inject private MyTestService myTestService;
@RequestMapping(value = {"", "list"}, method = RequestMethod.GET)
public String list(Map<String,Object> model){
this.myTestService.whoAmI(this.getClass().getName());
... ...
}
}
输出结果:
14:19:19.985 [localhost-startStop-1] [INFO ] (Spring) ContextLoader - Root WebApplicationContext: initialization started
... ...
14:19:20.633 [localhost-startStop-1] [INFO ] (Spring) AutowiredAnnotationBeanPostProcessor - JSR-330 "javax.inject.Inject" annotation found and supported for autowiring
14:19:20.934 [localhost-startStop-1]
[INFO ] MyTestServiceImpl:12 <init>() - MyTestServiceImpl instance is created, address is cn.wei.flowingflying.customer_support.site.test.MyTestServiceImpl@407cec
... ...
六月 23, 2017 2:19:21 下午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring FrameworkServlet "springDispatcher"
... ...
14:19:23.217 [http-nio-8080-exec-5]
[INFO ] MyTestServiceImpl:16 whoAmI() - cn.wei.flowingflying.customer_support.site.AuthenticationController : cn.wei.flowingflying.customer_support.site.test.MyTestServiceImpl@407cec
... ...
14:19:36.195 [http-nio-8080-exec-8] wei [INFO ] MyTestServiceImpl:16 whoAmI() - cn.wei.flowingflying.customer_support.site.TicketController :
cn.wei.flowingflying.customer_support.site.test.MyTestServiceImpl@407cec
我们看到在 AuthenticationController 和 TicketController 中注入的对象实际地址一样,都是 407cec,即为同一对象,是在 Root Context 中被实例化,且只实例化一次。了解这点非常重要,不同 Controller 对某个注入的 Service 进行操作,是可能相互影响的。
在 在 Listener 中实现注入实例 无法直接在 Listener 中自动注入
Listener 是 Serlvet container 的,不是 Spring framework 的,不是任何的Spring Component,不在自动扫描的范围内,我们在里面标记的任何@Inject 不会被注入。
我们创建一个 Session Listener 作测试 @WebListener
public class WeiTempListener implements HttpSessionListener {
private static final Logger log = LogManager.getLogger();
@Inject private MyTestService myTestService;
public WeiTempListener() { }
public void sessionCreated(HttpSessionEvent se)
{
log.info("------------------------------------");
this.myTestService.whoAmI(this.getClass().getName());
}
public void sessionDestroyed(HttpSessionEvent se)
{ }
}
14:50:31.164 [http-nio-8080-exec-4]
[INFO ] WeiTempListener:32 sessionCreated() - ------------------------------------
六月 23, 2017 2:50:31 下午 org.apache.catalina.session.StandardSession tellNew
严重: Session event listener threw exception
java.lang.NullPointerException
at cn.wei.flowingflying.customer_support.site.WeiTempListener.sessionCreated(WeiTempListener.java:33)
实现方式
前面已经看到注入的实例化是在 Root Context 中进行。我们需要在 Listener的初始化过程中,想办法从 Root Context 中获得实例。我们需要:
1. 跟踪发现,Listener 的初始化是 RootContext 的初始化之前,这时是无法获取bean 的。因此 删除 @WebListener 的标记,否则无法确保初始化的顺序 – 在 BootStrap 中,在 Root Context 的初始化后加载 Listener,确保能够获取在 Root Context 中实例化的 bean 2. HttpSessionListener 封装很好,不开放初始化接口,因此需要增加继承ServletContextListener,以便暴露初始化的方法,在初始化中作为 bean。
3. 使用 org.springframework.beans.factory.annotation.Configurable 标注对于非Spring 管理的 bean。
public class BootStrap implements WebApplicationInitializer{
@Override
public void onStartup(ServletContext container) throws ServletException {
container.getServletRegistration("default").addMapping("/resource/*");
AnnotationConfigWebApplicationContext rootContext =
new AnnotationConfigWebApplicationContext();
rootContext.register(RootContextConfiguration.class);
container.addListener(new ContextLoaderListener(rootContext));
//【1】设置 Listener 的加载位置,在完成 Root Context 之后
container.addListener(WeiTempListener.class);
... ...
}
}
我们再看看 WeiTempListener //【1】删除@WebListener 标记,采用手动在 BootStrap 中加入
//【2】增加 ServletContextListener 接口,以获得初始化入口
public class WeiTempListener implements HttpSessionListener,ServletContextListener {
private static final Logger log = LogManager.getLogger();
@Inject private MyTestService myTestService;
public WeiTempListener() {
// 这在 Root Context 初始化之前执行,因此我们不能在构造函数中进行设置
log.info("-----------------WeiTempListener-------------------");
}
public void sessionCreated(HttpSessionEvent se)
{
this.myTestService.whoAmI(this.getClass().getName());
// 测试
}
public void sessionDestroyed(HttpSessionEvent se)
{
}
//【3】在 contextInitialized()中获得 Spring 的 rootContext 实例
@Override
public void contextInitialized(ServletContextEvent event) {
// 根据 BoorStrap 的执行顺序,这时 RootContext 的初始化已经完成,包括Service 的实例化,可以注入。
// 无法自动注入是因为 Listerner 并不是 Spring 的 bean(如不是@Controller),我们要想办法手动让 Listerner 成为 bean。
// (1)获取 Spring 的 root WebApplicationContext
WebApplicationContext rootContext =
WebApplicationContextUtils.getRequiredWebApplicationContext(event.getServletContext());
// (2)获取根上下文扫描和注入 bean 的 factory
AutowireCapableBeanFactory factory = rootContext.getAutowireCapableBeanFactory();
// (3)无法扫描是因为 Listener 不是 Spring 的 bean,类上没有加 spring 的 annotation,我们需要手动设置这个对象(this)作为 Factory 中的一个 bean,这样才能对里面的属性进行注入
factory.autowireBeanProperties(this, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE,true);
// (4)在 factory 中对这个新的 bean 进行初始化。
factory.initializeBean(this,"WeiTempListener");
log.info(this.myTestService); //测试一下注入情况
}
public void contextDestroyed(ServletContextEvent sce) { }
}
限制说明
虽然我们将 Listener 手动设置为 fatory 可以认识的 bean,但仍不是 spring 下一个真正意义的 bean。其他的 bean 中不能将其注入,部分地我们可以通过factory 的 registerSingleton(),将其设置为 singleton bean 来解决(即确保注入的都是同一的 bean),但依然收到限制,有些内容仍无法正常执行,如计划执行,构造后和注销前的回调函数。
SessionListener 的具体应用例子 webSocket chat 例子
这个小例子场景,我们在下一学习中继续使用,再此作个说明,用户请求帮助(通过 websocket 发其 chat),客服(另一用户)选择需要帮助的用户(加入chat),双方之间进行通话:
• 用户和 web app 之间建立 web socket 连接 A,客服(另一用户)和 web app之间建立 web socket 连接 B,web app 关联这两段连接之间的消息收发。
• web app 在 web socket 中定时向浏览器发送 ping 消息,并监听响应的 pong消息。
• 用户的名字将根据登录信息自动获取,用户退出,chat 也将关闭 通过 SessionRegisterService 来维护所有的在线 http session – 将存放在 session 中的 username 方在请求的 principal 中,方便获取
在 webSocket chat 中我们通过 SessionRegisterService 打算维护在线的session。对用户退出登录(主动退出,session 超时而被删除)时,如果该用户在chat 中,需要行 chat close 动作,可以利用 Consumer 进行触发。
SessionRegisterService public interface SessionRegistryService {
public void addSession(HttpSession session);
public void updateSessionId(HttpSession session, String oldSessionId);
public void removeSession(HttpSession session);
/** 注册回调函数 用户开启 chat 进行回掉函数或者触发函数的注册 */
public void registerOnRemoveCallback(Consumer<HttpSession> callback);
/** 注销回掉函数 用户关闭 chat 进行注销 */
public void deregisterOnRemoveCallback(Consumer<HttpSession> callback);
}
SessionListener
SessionListener 没有什么特别:
1 允许 SessionRegisterService 的注入,前面刚刚学习 2. 对 create/change Id/remove session 是调用 service 的 add/update 和 remove接口 public class SessionListener implements HttpSessionListener, ServletContextListener {
@Inject private SessionRegistryService sessionRegistryService;
public void sessionCreated(HttpSessionEvent event)
{
this.sessionRegistryService.addSession(event.getSession());
}
public void sessionIdChanged(HttpSessionEvent event, String oldSessionId)
{
this.sessionRegistryService.updateSessionId(event.getSession(), oldSessionId);
}
public void sessionDestroyed(HttpSessionEvent event)
{
this.sessionRegistryService.removeSession(event.getSession());
}
@Override
public void contextInitialized(ServletContextEvent event) {
.... 见前面 ....
}
... ...
}
SessionRegistryService 的实现 @Service
public class DefaultSessionRegistryService implements SessionRegistryService{
private final Map<String, HttpSession> sessions = new Hashtable<>();
/** Consumer 的具体操作是:如果 httpSession 相同,则删除,里面已经进行了判断,所以就不需要 Predicate */
private final Set<Consumer<HttpSession>> callbacks = new HashSet<>();
/** callbacksAddesWhileLocked 是个比较有意思的处理,需要学习:
*
我们几乎同时收到了同一个用户(同一个 httpSession)要求退出登录 和 chat 申请的两个操作,一般来讲虽然不会如此,多页面的请求有可能会造成几乎同时到达,由或者 session 到期的瞬间。callbacksAddedWhileLocked 用于对这个时间差的 session 进行处理,即请求加入,然后马上推出登录,即 removeSession()和 registerOnRemoveCallback()几乎同时操作。理想顺序是有先后,而不是同时进行,但实际多线程运行的顺序无法保证。callbacksAddedWhileLocked 来避免同时运行的问题。
*/
private final Set<Consumer<HttpSession>> callbacksAddedWhileLocked = new HashSet<>();
@Override
public void addSession(HttpSession session) {
this.sessions.put(session.getId(), session);
}
@Override
public void updateSessionId(HttpSession session, String oldSessionId) {
synchronized(this.sessions) {
this.sessions.remove(oldSessionId);
addSession(session);
}
}
@Override
public void removeSession(HttpSession session) {
this.sessions.remove(session.getId());
synchronized(this.callbacks){
this.callbacksAddedWhileLocked.clear();
this.callbacks.forEach(c -> c.accept(session));
try {
this.callbacksAddedWhileLocked.forEach(c -> c.accept(session));
} catch(ConcurrentModificationException ignore) { }
}
}
@Override
public void registerOnRemoveCallback(Consumer<HttpSession> callback) {
this.callbacksAddedWhileLocked.add(callback);
synchronized(this.callbacks){
this.callbacks.add(callback);
}
}
@Override
public void deregisterOnRemoveCallback(Consumer<HttpSession> callback) {
synchronized(this.callbacks){
this.callbacks.remove(callback);
}
}
}
相关链接:
我的 Professional Java for Web Applications 相关文章
- 范文大全
- 职场知识
- 精美散文
- 名著
- 讲坛
- 诗歌
- 礼仪知识
-
超星尔雅学习通《对话大国工匠致敬劳动模范》题库附答案
超星尔雅学习通《对话大国工匠致敬劳动模范》题库附答案 1、历史只会眷顾坚定者、奋进者、搏击者,而不会
【入党申请书】 日期:2021-05-12
-
对于政治生态考核整改工作方案
本文系作者原创投稿,仅供学习参考,请勿照搬照抄! 关于政治生态考核整改工作的方案 为做好推进风清气正
【经济工作】 日期:2020-06-05
-
大学生学习2024年两会精神心得感悟
大学生学习2024年两会精神心得感悟过去一年,是全面贯彻二十大精神的开局之年,中国共产党带领全国各族人民,付出艰辛努力,换来重大成
【心得体会】 日期:2024-03-07
-
中国传统故事英文版 中国古代故事英文版
历史学科蕴含着许多丰富的、生动的、有趣的素材,每一个历史事件、历史人物都有相关的、动人的历史小故事,都能给人以启迪。你对中国古代的故事了解多少呢?下面是小编为您...
【调查报告】 日期:2019-05-22
-
基尔霍夫定律验证实验报告
基尔霍夫定律的验证的实验报告本文关键词:基尔,定律,霍夫,验证,实验基尔霍夫定律的验证的实验报告本文
【思想宣传】 日期:2021-03-08
-
中小学党建工作实施意见
中小学党建设工作实施意见中小学校担负着培养德智体美全面发展的社会主义建设者和接班人的重要使命。加强中
【爱国演讲】 日期:2020-09-22
-
地藏经诵读仪规(完整版)
地藏经诵读仪规(完整版) 恭请文: 恭请大慈大悲大愿地藏王菩萨、护法诸天菩萨慈悲加持护念弟子***能
【个人简历】 日期:2021-03-31
-
青年学生学习全国人大十四届二次会议心得感想16篇
青年学生学习全国人大十四届二次会议心得感想16篇报告中提到政府在经济调控、消费政策、基础设施和制造业投资、房地产调控以及地方债务
【心得体会】 日期:2024-03-07
-
小学党建工作制度
小学党建工作制度33篇 党建工作责任制度 1 党支部年初制定全年党建工作计划,将目标任务分解到有关部
【思想学习】 日期:2021-02-10
-
材料力学考题
材料力学考题本文关键词:材料力学,考题材料力学考题本文简介:材料力学1、简易起重设备中,AC杆由两根
【入党申请书】 日期:2021-03-06
-
执行信息公开网
执行信息公开网 执行信息公开网 执行信息公开网: zhi*ing (点击下图可直接进行访问) 全国
【职场知识】 日期:2020-07-03
-
年国家开放大学电大电子商务单选题题库
单选: 1、EDI是指A、电子商务B、电子数据交换C、电子交易 D、移动数据交换 答案: B 2、电
【职场知识】 日期:2020-06-05
-
大学教师毕业设计指导记录4篇
大学教师毕业设计指导记录4篇 毕业设计是指工、农、林科高等学校和中等专业学校学生毕业前夕总结性的独立作业。是实践性教学最后一
【职场知识】 日期:2022-05-11
-
有机磷酸酯类中毒及其解救(实验报告范文)
有机磷酸酯类中毒及其解救XXX、XXX一、实验目的1 观察有机磷酸酯类农药敌百虫中毒时的症状。 2
【职场知识】 日期:2020-08-30
-
“以学生为中心”的教学原则
以学生为中心的教学原则教师在开展以学生为中心的教学实践中,必须谨记学习目标不再是知识的获得,能力要比知识更重要。以下是蒲公英阅读网
【职场知识】 日期:2023-01-05
-
2021教育基础知识试题(附答案)
2021教育基础知识精选试题(附答案) 1、主张恢复西方传统教育核心价值,反对“进步教育
【职场知识】 日期:2021-03-17
-
组工干部学习谈治国理政第三卷《共建创新包容开放型世界经济》心得体会
组工干部学习谈治国理政第三卷《共建创新包容的开放型世界经济》心得体会 《习近平谈治国理政》第三卷第七
【职场知识】 日期:2020-09-22
-
男一分钟仰卧起坐标准表
表表11--13 男生一分钟仰卧起坐、引体向上单项评分表(单位:次) 等级 单项 得分 三年级 四年
【职场知识】 日期:2021-05-08
-
心理健康黑板报_心理健康黑板报图片
虽然工作上难免压力,但是只要正视压力,一切就不会太辛苦。下面就随小编看看心理健康黑板报内容,希望喜欢哦。 心理健康黑板报图片欣赏 心理健康黑板报图片1 心理健...
【职场知识】 日期:2020-02-26
-
发展党员工作部门联审征求意见表
发展党员工作部门联审征求意见表发展对象姓 名 性别 出生年月 身份证号 现工作单位及职务 家庭住址
【职场知识】 日期:2020-09-22
-
唐代诗人李昂个人信息
唐代诗人李昂个人信息 导读:我根据大家的需要整理了一份关于《唐代诗人李昂个人信息》的内容,具体内容:
【古典文学】 日期:2020-11-07
-
[关于中秋的朗诵诗词] 关于爱国的朗诵诗词
中秋,热闹的街头树起了灯彩,舞起了火龙。你知道多少关于中秋的朗诵诗词?下面小编为你整理了几篇关于中秋的朗诵诗词,希望对你有帮助。 关于中秋的朗诵诗词一 中秋佳节...
【古典文学】 日期:2019-06-06
-
叠加原理实验报告
一、实验目的1、通过实验来验证线性电路中的叠加原理以及其适用范围。 2、学习直流仪器仪表的测试方法。
【古典文学】 日期:2020-11-12
-
输血查对制度
输血查对制度依据卫生部《临床输血技术规范》的要求,制订抽血交叉配备查对制度、取血查对制度、输血查对制
【古典文学】 日期:2020-09-24
-
大气唯美黑板报【国庆节大气黑板报】
日本在投降的那一天,再也没有昔日的嚣张,我们中国的屈辱得到洗刷。下面就随小编看看国庆节大气黑板报内容,希望喜欢哦。 国庆节大气黑板报图片欣赏 国庆节大气黑板报...
【古典文学】 日期:2019-05-05
-
【二人旅游英语情景对话】 二人英语对话2分钟旅游
随着国内外旅游业市场的不断扩大,旅游英语人才成为社会的紧缺人才。小编精心收集了二人旅游英语情景对话,供大家欣赏学习! 二人旅游英语情景对话1 A:Itsmyfirsttimeto...
【古典文学】 日期:2020-02-29
-
怎样认识世界处于百年未有之大变局
怎样认识世界处于百年未有之大变局 首先,“大变局”是对国际格局发生巨大变迁的
【古典文学】 日期:2020-10-28
-
2021公安专业知识考试练习题(附答案)
2021公安专业知识考试练习题(附答案) 1 甲地公安机关接到群众举报,在当天举行的大型娱乐活动中,
【古典文学】 日期:2021-01-29
-
乳糖检测方法
附录A(规范性附录) 乳糖的测定A 1原理牛乳或乳粉样液经沉淀剂澄清后,样液中的乳糖在苯酚、氢氧化钠
【古典文学】 日期:2020-12-08
-
法律知识手抄报图片大全|法律知识手抄报
我国开展了全面的普法宣传工作,法制宣传教育、普及法律常识作为经常的重要任务。做法制教育手抄报,普及法律知识。下面是小编为大家带来的法律知识手抄报图片大全,希望大家...
【古典文学】 日期:2020-03-10
-
时尚女装店面装修效果图|韩式女装店面装修
在服装店的设计之中,我们要将多变、创新、品牌自身的定位与发展趋势相结合,用一种可持续的设计方式呈现出来,以便更加适应不断更新的展示主体。下面小编就为大家解开时尚女装店...
【中国文学】 日期:2019-05-16
-
2021年超星尔雅学习通《辩论与修养》章节测试试题(共183题附答案)
2021年超星尔雅学习通《辩论与修养》章节测试试题(共183题附答案)1、辩论的目的不是单纯获得某种
【中国文学】 日期:2021-05-12
-
天地人格最佳搭配起名技巧|天地人格的五行怎么算
天地有阴有阳,物体刚柔表里,而数字则有一个诱导力,那么你知道怎么计算天地人格来取名吗?今天小编为你整理了天地人格最佳搭配起名技巧,一起来看看用天地人格取名的方法有哪些...
【中国文学】 日期:2019-06-06
-
信息技术重要性
信息技术的重要性 信息技术与课程整合将带来课程内容的革新,信息技术的高速发展,要求传统的课程必须适应
【中国文学】 日期:2021-02-11
-
【世界上最大的半岛】阿拉伯半岛
你知道世界上最大的半岛是什么吗?下面由小编来介绍一下。 阿拉伯半岛的简介 阿拉伯半岛(阿拉伯文:)位于亚洲,是世界上最大的半岛。沙特阿拉伯、也门、阿曼、阿拉伯联合...
【中国文学】 日期:2019-05-24
-
2022年当前世界下中国面临国际形势论文范本
和平与发展仍然是当今时代的主题。谋和平、求合作、促发展是各国人民的共同愿望。为了大家学习方便,下面是小编为大家整理的当前世界下中国面临的国际形势论文范文内容,以供参...
【中国文学】 日期:2022-03-31
-
雪天安全行车注意事项_雪天安全行车提示语
维护城市交通秩序,争做河源文明市民。你们想看看雪天安全行车提示语有哪些吗?以下是小编推荐雪天安全行车提示语给大家,欢迎大家阅读! 安全行车温馨提示语【经典篇】 1...
【中国文学】 日期:2020-03-15
-
古代人物漫画女生唯美图片欣赏 漫画人物图片女孩唯美
中国漫画始于清末民初,而平面设计虽然其名称是在改革开放以后确立的,但设计活动却自古就有,二者的相互影响是本文的主要讨论范围。小编整理了唯美古代女生人物漫画,欢迎阅读!...
【中国文学】 日期:2020-03-19
-
2021年5月时事政治热点(国内+国际)
2021年年5月时事政治热点(国内+国际)国内部分 1 55月月66日,由商务部和海南省人民政府共同
【中国文学】 日期:2021-06-10
-
普通高中通用技术学生设计作品图文材料
普通高中通用技术学生设计作品图文材料 一、基本情况作品名称:竹刻大佛笔筒设计人员:xxx学校班级:海
【中国文学】 日期:2020-09-28
-
山东省生产经营单位安全生产主体责任规定(303号令)
山东省生产经营单位安全生产主体责任规定(2013年2月2日山东省人民政府令第260号公布根据2016
【外国名著】 日期:2020-10-22
-
改革开放大事记简表(改革开放新时期1978-2012年)
改革开放大事记简表 (1978-2012年) 时间1978年12月18日至22日地点北京事件党的十一
【外国名著】 日期:2021-06-17
-
大学生音乐欣赏论文 大学音乐鉴赏论文3000
今天小编就为你介绍关于大学生音乐欣赏论文,下面是!小编给你搜集了相关资料!希望可以能帮助到大家。 大学生音乐欣赏论文—第一篇 音乐是生活不可缺少的一部分,学会欣...
【外国名著】 日期:2019-05-27
-
材料力学金属扭转实验报告
材料力学金属扭转实验报告 【实验目的】 1、验证扭转变形公式,测定低碳钢的切变模量G。;测定低碳钢和
【外国名著】 日期:2020-11-27
-
长豆角家常做法怎么做好吃营养 炒豆角的家常做法
豆角在我们日常生活中是很常见的食材,可能我们只知道它含有优质蛋白和维生素,其实它还有其他的营养价值。它也是可以和很多食材做搭配的。下面小编为大家整理了长豆角的做法...
【外国名著】 日期:2020-02-26
-
白烛葵的花语:白烛葵的不死幻想症
白烛葵,花名,花语为“不感兴趣”。现又指《知音漫客》上连载漫画《极度分裂》里主要角色之一。下面小编为你整理了白烛葵的花语。欢迎阅读。 白烛葵的花语:不感兴趣 ...
【外国名著】 日期:2019-05-11
-
(新版)就业知识竞赛题库及答案解析
(新版)就业知识竞赛题库(全真题库) 一、单选题1 (单选):在职业生涯规划工具中,组织在展开员工职
【外国名著】 日期:2021-07-21
-
植物装饰画黑白图片欣赏|荷花装饰画黑白图片
装饰画是一种装饰性艺术,是装饰性和创造性相结合的艺术设计形式。小编整理了植物装饰画黑白,欢迎阅读! 植物装饰画黑白图片展示 植物装饰画黑白图片1 植物装饰画黑白...
【外国名著】 日期:2019-05-31
-
坚定不移全面从严管党治警研讨发言稿
坚定不移全面从严管党治警研讨发言稿政治建警、从严治警是党在新时代的建警治警方针。一年前的全国公安工作
【外国名著】 日期:2020-09-18
-
[10.1旅游去哪里好玩] 旅游去哪里好玩
十月一到,秋意已在一个我们不经意的黎明走来,习习凉风,却是最适合出门游行。小编为您整理了10 1旅游去哪里好玩,秋天,我们一起出发吧。 1、云南建水古城 建水古城...
【外国名著】 日期:2020-03-01
-
梧桐花的花语|梧桐花的功效与作用
梧桐花为梧桐科植物梧桐的花,植物形态详梧桐子条。今天小编为你整理了梧桐花的花语,欢迎阅读。 梧桐花的花语是:情窦初开 在春季里晚开的花朵,有着恬淡的气息。 ...
【寓言童话】 日期:2020-03-03
-
西部计划笔试题库(99题含答案)
西部计划笔试题库(99题含答案) 1 第十三届全国人大三次会议表决通过了《中华人民共和国民法典》,自
【寓言童话】 日期:2021-06-16
-
大学生音乐欣赏论文 大学音乐鉴赏论文3000
今天小编就为你介绍关于大学生音乐欣赏论文,下面是!小编给你搜集了相关资料!希望可以能帮助到大家。 大学生音乐欣赏论文—第一篇 音乐是生活不可缺少的一部分,学会欣...
【寓言童话】 日期:2020-03-12
-
年学生资助诚信教育主题活动方案
各二级学院(部): 为深入贯彻落实习近平总书记关于教育的重要论述,落实立德树人根本任务,增强当代大学
【寓言童话】 日期:2020-06-21
-
主题教育调查研究工作方案2篇
主题教育调查研究工作方案1根据省、市、县开展“不忘初心、牢记使命”主题教育工
【寓言童话】 日期:2021-03-19
-
油管、套管规格尺寸对照表
API油管规格及尺寸 公称尺寸(in) 不加厚外径(mm) 不加厚内径(mm) 加厚外径(mm) 加
【寓言童话】 日期:2020-08-31
-
惊悚鬼故事50字 令人惊悚的故事
这些惊悚故事在短短的篇幅和时间之内让您感受到故事里传达出来的恐怖感,令你感到害怕。下面就是小编给大家整理的令人惊悚的故事,希望对你有用! 令人惊悚的故事篇1:学校...
【寓言童话】 日期:2019-05-13
-
【古代男生漫画图片大全】男生漫画头像
漫画和动画组成了动漫产业的两大支柱。然而,与动画相比,漫画在业界和学界皆相对冷清。小编整理了古代男生漫画,欢迎阅读! 古代男生漫画图片展示 古代男生漫画图片1 ...
【寓言童话】 日期:2019-05-27
-
读《李光耀观天下》有感_李光耀观天下txt在线读
务实与真诚 ——读《李光耀观天下》有感 原创:雁过留声ly 购于北大,在出差的飞机和高铁上读完,这本《李光耀观天下》给予我很多启示。严格地说,这本书没有详
【寓言童话】 日期:2019-05-05
-
北京最好吃的自助餐厅 北京高档自助餐排名
自助餐简直就是拯救大胃王的最佳饮食!没有之一!世界上没有什么事情是吃一顿自助餐解决不了的,如果有,那就吃两顿!下面小编给大家推荐北京几家好吃的自助餐。 北京最好吃的...
【寓言童话】 日期:2020-02-25
-
学生高考动员演讲稿
学生高考动员演讲稿3篇高考动员演讲稿11 老师们、同学们: 大家下午好!漫漫高考长征路已经进入尾声了
【百家讲坛】 日期:2021-09-22
-
企业安全演讲稿2021
最新企业安全的演讲稿5篇 演讲稿是作为在特定的情境中供口语表达使用的文稿。在充满活力,日益开放的今天
【百家讲坛】 日期:2021-09-22
-
XX镇扶贫项目实施专项整治工作总结_1
XX镇扶贫项目实施专项整治工作总结 为深入贯彻精准扶贫精准脱贫基本方略,认真落实党中央、国务院,省委
【百家讲坛】 日期:2021-09-22
-
对乡镇领导班子干部成员批评意见例文
对乡镇领导班子干部成员的批评看法范文 一、对党委书记XXX同志的批评看法〔3条〕 1、与干部交流偏少
【百家讲坛】 日期:2021-09-22
-
群英乡扶贫资金项目芬坡村祖埇村生产道路硬化工程绩效自评报告
群英乡扶贫资金项目((芬坡村祖埇村生产道路硬化工程))绩效自评报告 一、基本情况(一)群英乡扶贫资金
【百家讲坛】 日期:2021-09-22
-
党委书记警示教育大会上讲话2021汇编
党委书记在警示教育大会上的讲话55篇汇编 党委书记在警示教育大会上的讲话(一) 同志们: 根据省州委
【百家讲坛】 日期:2021-09-22
-
对于2021年召开巡视整改专题民主生活会对照检查材料
关于12021年召开巡视整改专题民主生活会对照检查材料 按照中央巡视组要求和省、市、区委统一部署,区
【百家讲坛】 日期:2021-08-14
-
消防安全知识培训试题.doc
消防安全知识培训试题姓名: 部门班组: 成绩: 一:填空题,每空4分,共44分。 1、灭火剂是通过隔
【百家讲坛】 日期:2021-08-14
-
涉疫重点人员“五包一”居家隔离医学观察工作流程
涉疫重点人员“五包一”居家隔离医学观察工作流程 目前,全球疫情仍处于大流行状
【百家讲坛】 日期:2021-08-14
-
疫情防控致全体师生员工及家长一封信
疫情防控致全体师生员工及家长的一封信 各位师生员工及全体家长朋友: 暑假已至,近期我省部分地方发现确
【百家讲坛】 日期:2021-08-14