javalistener
『壹』 关于java listener问题
SendMailTimer
你先确认它到底是抽象类,还是实现类(可能实现函数是空函数,不做任何事)版。那这种显然没问题了。权
如果SendMailTimer 它是个接口,不能实例化,我猜测这种情况系统一般也会正常运作,就像你这里个地方配置了一个不正确的 类路径。因为系统在解析xml的时候,要通过反射机制来实例化一个对象,可以在实例化过程中判断是否可实例化,是否是指定接口的实现,这些异常检测我相信 WEB容器应该是做了的。
『贰』 java的listener是什么原理
用的观察者模式,jdk提供了Observer 和 Observable来对持观察模式
『叁』 在java中有多少种不同的listener
最好下一个java文档
那里面你就可以看到你想要的了
『肆』 oracle的监听器listener 和 java web的监听器listener 的联系是什么
区别如下:
1、从定义方面的区别:
1)oracle监听器是Oracle基于服务器端的一种网络服务,主要用于监听客户端向数据库服务器端提出的连接请求。既然是基于服务器端的服务,那么它也只存在于数据库服务器端,进行监听器的设置也是在数据库服务器端完成的。
2)java web中的listener可以监听web服务器中某一个执行动作,并根据其要求作出相应的响应。通俗的语言说就是在application,session,request三个对象创建消亡或者往其中添加修改删除属性时自动执行代码的功能组件。比如spring 的总监听器 会在服务器启动的时候实例化配置的bean对象 、 hibernate 的 session 的监听器会监听session的活动和生命周期,负责创建,关闭session等活动。
2、从实现方面的区别:
oracle的监听是基于网络和端口号实现的:
Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。主要作用是: 做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。
二者的联系:都是通过后台守护进程捕获某一事件的发生。
『伍』 关于java的Listener
一看就是当复窗口关闭的时候退出制程序啊
学习Ui最好还是找个例子看一遍,自己再敲一遍,不会了就看看,然后再自己不看,敲一遍,理解透一个了,之后再看别的就轻松点了,然后一点一点的向功能完善和难度增加的方向发展,很快就能上手了
『陆』 java中,addlistener的用法,请举例说明
两个this都指的是当前类的当前实例(类对象)。Java里的this比较简单,只能表示当前的类对版象,”当权前“就是指的this关键字写在的类代码。然后回到说说你这个this.addWindowListener(this);前一个this.addWindowListene()r能起作用,是因为你的当前类是java.awt.Window类或其子类,因为addWindowListener()这个方法是java.awt.Window类里的。后一个this能放到addWindowListener()的参数里面,是因为你的当前类必定实现了WindowListener的接口(当然也可能是继承了实现这个接口的类,效果一样),因为addWindowListener()要求的参数类型就是WindowListener(java.awt.event.WindowListener)
『柒』 java的listener是什么原理
回调,
Java的事件监听机制是这样的:
事件的观察者向事件的发出者进行注册,当事件发生时,事件的发出者调用之前注册的回调函数,将相关事件信息通知到事件的观察者。这个过程中,当然不用事件的观察者进行轮询。
你可能有个问题:那么事件的发出者如何得知事件发生呢?实际上举个例子来说如窗口类,有个窗口关闭事件可以注册,作为窗口类来说内部有相关关闭窗口的方法,只要这些方法被调用,当然就知道窗口被关闭了,只要这些方法在合适的时机调用回调函数即可。
事件的观察者可以没有,有一个或多个,只要再事件的发出者内部维护一个List<XxxListener>即可,到时候迭代列表依次发出事件即可。(这里一般不设计为多线程,而是单线程依次发送,所以事件处理函数最好不要阻塞太长时间,否则会影响到下一个观察者,甚至事件发出方代码的调用)
Java 事件处理方法是基于授权事件模型
事件源生成事件并将其发送至一个或多个监听器
监听器简单地等待,直到它收到一个事件。一旦事件被接受,监听器将处理这些事件,然后返回。
事件:在授权事件模型中,事件是一个描述事件源状态改变的对象 。
通过鼠标、键盘与 GUI 界面直接或间接交互都会生成事件。 如:按下一个按钮、通过键盘输入一个字符、选择列表框中的一项、点击一下鼠标等。
事件源:事件源是一个生成事件的对象
一个事件源可能会生成不同类型的事件
事件源提供了一组方法,用于为事件注册一个或多个监听器。
每种事件的类型都有其自己的注册方法。一般形式为:
public void add<EventType>Listener (TypeListener e)
AWT采取的事件控制过程:监听器对象属于一个类的实例,这个类实现了一个特殊的接口,名为“监听者接口”
事件源是一个对象,它可以注册一个或多个监听器对象,并向其发送事件对象。
事件源将在发生事件时向所有注册的监听器发送事件对象。
监听器对象使用事件对象中的信息来确定它们对事件的响应
事件模型:
1.基于代理(授权)事件模型
事件处理是一个事件源授权到一个或者多个事件监听器。其基本原理是:组件激发事件,事件监听器监听和处理事件,可以调用组件的add<EventType>Listener方法向组件注册监听器。把其加入到组件以后,如果组件激发了相应类型的事件,那么定义在监听器中的事件处理方法会被调用。
2.此模型主要由以三种对象为中心组成
事件源 由它来激发产生事件
是产生或抛出事件的对象。
事件监听器 由它来处理事件
实现某个特定EventListener 接口,此接口定义了一种或多种方法,事件源调用它们以响应该接口所处理的每一种特定事件类型 。
事件 具体的事件类型
事件类型封装在以java.util.EventObject为根的类层次中。当事件发生时,事件记录发生的一切事件,并从事件源传播到监听器对象
『捌』 java listener是抽象类还是接口
是接口。接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。
『玖』 java listener 线程安全吗
一、简单介绍
在我们用框架编程的过程中,经常不用太关注多线程问题,这是因为例如Servlet和RMI(Remote Method Invocation,远程方法调用),RMI使得代码能够调用其他JVM中的运行的对象。这些框架负责解决一些细节问题,例如请求管理、线程创建、负载均衡,并在正确的时刻将请求分发给正确的应用程序组件。编写Servlet的开发人员不需要了解有多少请求在同一时刻要被处理,也不需要了解套接字的输入流或输出流是否被阻塞。当调用Servlet的service方法来响应Web请求时,可以以同步方式来处理这个请求,就好像它是一个单线程程序。这种方式可以简化组件的开发,并缩短掌握这种框架的学习时间,但我们想学好编程,还是需要学习并发编程
1、编程的一些原则
在编写并发应用程序时,一种正确的编程方法就是:首先使代码正确运行,然后再提高代码的速度。即便如此,最好也只是当性能测试结果和应用需求告诉你必须提高性能,以及测量结果表明这种优化在实际环境中确实能带来性能提升时,才进行优化
2、活跃性问题
多线程中提到的活跃性问题,指的就是让线程处理死锁或活锁,就是各个线程阻塞不执行,当某个操作无法继续执行下去时,这样就导致了活跃性问题
平时编程中应该怎样做到这句话?:框架通过在框架线程中调用应用程序代码将并发性引入到程序中。在代码中将不可避免地访问应用程序状态,因此所有访问这些状态的代码路径都必须是线程安全的
3、一般并发错误的修复方法
如果当多个线程访问同一个可变的状态变量时没有使用合适的同步,那么程序就会出现错误。有三种方式可以修复这个问题:
(1)不在线程之间共享该状态变量
(2)将状态变量修改为不可变的变量
(3)在访问状态变量时使用同步
4、线程安全类和线程安全程序
完全由线程安全类构成的程序并不一定就是线程安全的,而在线程安全类中也可以包含非线程安全的类
二、线程安全性
当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么就称这个类是线程安全的
1、无状态对象
一个无状态的Servlet
[java] view plain
import java.math.BigInteger;
import javax.servlet.*;
import net.jcip.annotations.*;
@ThreadSafe
public class StatelessFactorizer extends GenericServlet implements Servlet {
public void service(ServletRequest req, ServletResponse resp) {
BigInteger i = extractFromRequest(req);
BigInteger[] factors = factor(i);
encodeIntoResponse(resp, factors);
}
}