学习一
java.bean.PropertyChangeListener用来监听bean类的属性值改变。当改变时同时执行对应事件。并且是线程安全的。tomcat用此reload的Boolean值改变是否要从新加载。java
public class Demo2 implements PropertyChangeListener{ PropertyChangeSupport support = new PropertyChangeSupport(this); private String name; public String getName() { return name; } public Demo2() { this.name = "apple"; addListenProperty(this); } public void setName(String name) { String oldName = this.name; this.name = name; support.firePropertyChange("name", oldName, this.name); } public void addListenProperty(PropertyChangeListener li) { support.addPropertyChangeListener(li); } @Override public void propertyChange(PropertyChangeEvent evt) { System.out.println("--------------------------------"); System.out.println(evt.getOldValue()); System.out.println(evt.getNewValue()); System.out.println(evt.getPropertyName()); ((Demo2)evt.getSource()).gotoSchool(); System.out.println("--------------------------------"); } public void gotoSchool() { System.out.println("welcome to MIT !"); } }
Test测试类web
public class Demo { public static void main(String[] args) { Demo2 t = new Demo2(); t.setName("jobs"); System.out.println("~~~~~~~~~~~~~~~~"); t.setName("steven"); } }
测试结果数组
-------------------------------- apple jobs name welcome to MIT ! -------------------------------- ~~~~~~~~~~~~~~~~ -------------------------------- jobs steven name welcome to MIT ! --------------------------------
学习二
接口Pipeline 流水线功能学习有点相似于过滤器构造。它有一个Value数组。使用 System.arraycopy() 来扩展流水线阀门个数。
invoke方法传递到下一个。阀门所有经过以后有一个basic方法。就是warpper包装器了。
这时候开始加载Servlet.class。执行service方法。阀门能够用来HeaderLoggerValve,ClientIPLoggerValve记录日志。tomcat
public interface Pipeline { public Valve getBasic(); public void setBasic(Valve valve); public void addValve(Valve valve); public Valve[] getValves(); public void removeValve(Valve valve); public Valve getFirst(); }
接下来接口Lifecycle,用于控制类的生命周期了。几乎全部的容器都实现了这个类。
还有loader类。类的加载。动态加载webapp下的class文件。有点复杂有时间在看看。安全
附上tomcat各容器之间关系图,多看看,多想一想。app
流程图webapp