15、Spring事件机制_观察者模式

1、ApplicationContext的事件机制是使用标准的观察者模式实现。通过ApplicationEvent(被观察者)类和ApplicationListener(观察者)接口实现。

ApplicationEvent:容器事件,必须由ApplicationContext发布;

ApplicationListener:监听器,可有容器中任何的Bean担任;

实际上,Spring的时间机制和所有的时间机制都基本相似,他们都需要事件源、事件和事件监听器组成。只是此处的事件源是ApplicationContext,且事件必须由Java程序显示触发。

2、写一个事件例子:

容器事件:

/**
 * 被观察者
 */
public class MyTestEvent extends ApplicationEvent {

 private static final long serialVersionUID = 1L;
 private String id;
 private String name;
 public MyTestEvent(Object source) {
  super(source);
 }
 public MyTestEvent(Object source, String id, String name) {
  super(source);
  this.id = id;
  this.name = name;
 }
 
 public String getId() {
  return id;
 }
 public void setId(String id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }

}

监听器:

/**
 * 观察者
 * @author Administrator
 */
public class MyTestListner implements ApplicationListener<ApplicationEvent> {

 public void onApplicationEvent(ApplicationEvent arg0) {
  if(arg0 instanceof MyTestEvent){
   MyTestEvent event = (MyTestEvent)arg0;
   System.out.println(event.getId());
  }else{
   
  }
 }
}

Java程序显示触发:

public static void main(String[] args) {
  ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-base.xml");
  MyTestEvent ev = new MyTestEvent("hello", "001", "maomao");
  ctx.publishEvent(ev);
 }

spring-base.xml监听配置:

<bean class="com.event.MyTestListner"></bean>

3、总结

当系统创建spring容器,加载spring容器时会自动触发容器事件,容器事件监听器可一件听到这些事件。除此之外,程序也可以调用ApplicationContext的publishEvent()方法来主动触发容器事件。


<think>嗯,用户想在银河麒麟V10系统中重置root密码,我需要根据提供的引用资料来整理步骤。首先,我得确定用户使用的是桌面版还是服务器版,因为两者的步骤可能不同。引用[1]提到桌面版基于Debian,服务器版则不同,而引用[2]指出服务器版在GRUB模式下需要输入默认账户密码root和Kylin123123。 步骤可能包括进入GRUB菜单,修改启动参数进入单用户模式,然后挂载文件系统并修改密码。需要注意不同版本的差异,比如桌面版可能不需要GRUB密码,而服务器版需要。引用[3]提到修改root密码的命令是passwd root,且输入时不显示,这点要提醒用户注意。 还要考虑用户可能在过程中遇到问题,比如引用[4]提到的登录闪退问题,或许与错误的配置有关,所以提醒谨慎操作。最后,引用[5]中修改MySQL密码的例子,虽然不直接相关,但说明密码修改命令的结构类似。 需要分步骤说明,确保用户清楚每个步骤,特别是如何进入GRUB,编辑内核参数,以及执行密码修改命令。同时,注意事项部分要强调备份数据,区分版本,正确输入命令,避免系统问题。可能的相关问题包括不同版本的差异,GRUB密码问题,和单用户模式的作用。</think>### 银河麒麟V10系统重置root密码操作步骤 #### 一、服务器版重置方法(需GRUB密码) 1. **进入GRUB菜单** - 开机时按$Esc$或$Shift$键进入GRUB界面 - 选择带有"Advanced options"的启动项,按$E$键编辑 2. **输入GRUB认证信息** ```bash 账户名: root 密码: Kylin123123 # 默认密码[^2] ``` 3. **修改内核参数** - 在$linux$行末尾添加: ```bash init=/bin/bash ``` - 按$Ctrl+X$进入单用户模式 #### 二、桌面版重置方法(无需GRUB密码) 1. **进入恢复模式** - 开机选择"Advanced options for Kylin" > "Recovery mode" 2. **挂载文件系统** ```bash mount -o remount,rw / ``` 3. **修改密码** ```bash passwd root # 执行后输入新密码(无显示提示)[^3] ``` #### 三、通用操作验证 ```bash sync exec /sbin/init reboot ``` #### 注意事项 1. 操作前建议备份重要数据 2. 桌面版与服务器版操作差异较大(服务器版需要GRUB认证)[^1][^2] 3. 输入密码时不显示字符属于正常现象 4. 修改后若出现登录闪退,可能与X Window配置相关[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值