十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
检查是否设置了JAVA_HOME环境变量,如果没有设置,可用命令行当下设置
创新互联专注于抚松企业网站建设,响应式网站,商城网站建设。抚松网站建设公司,为抚松等地区提供建站服务。全流程定制开发,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务
set JAVA_HOME=...
dir检查当前目录是否存在TestPoint.java文件
改用javac .\TestPoint.java编译
运行命令notepad TestPoint.java,打开源文件,查看是否定义了包名,就是package行,如果定义了包路径,比如com.aa.bb,这时需要把TestPoint.java放到这样一个路径里面.\com\aa\bb\TestPoint.java。然后
javac com\aa\bb\TestPoint.java
如果你是在eclipse或Myeclipse中,新代码是指直接在某个方法中增加几行操作(代码不能涉及需要引入的新对象,在方法外面新增的方法也不行)。那么是可以不用重启项目。至于你说是程序,那么就不好说了。运行中的程序是不可能的,你说法可能有问题。
Web容器启动后执行代码的几种方式
其执行顺序为:
4===5===1===2===3
即指定init-method的Bean开始执行
接着实现spring的Bean后置处理器开始执行
然后是Servlet的监听器执行
再接下来是Servlet的过滤器执行
最后才是Servlet执行
1、实现Servlet监听器接口ServletContextListener
[java] view plain copy
public class InitListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent context) {
}
@Override
public void contextInitialized(ServletContextEvent context) {
// 上下文初始化执行
System.out.println("================[ServletContextListener]自动加载启动开始.");
SpringUtil.getInstance().setContext(
span style="white-space:pre" /spanWebApplicationContextUtils.getWebApplicationContext(arg0.getServletContext())
span style="white-space:pre" /span);
}
}
然后在web.xml文件配置该监听器
[html] view plain copy
listener
listener-classcom.test.init.InitListener/listener-class
/listener
2、实现Servlet的过滤器Filter
[html] view plain copy
public class InitFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException,
ServletException {
}
@Override
public void init(FilterConfig config) throws ServletException {
System.out.println("================[Filter]自动加载启动开始.");
// 读取Spring容器中的Bean[此时Bean已加载,可以使用]
//写启动需要执行的代码
System.out.println("================[Filter]自动加载启动结束.");
}
}
然后在web.xml文件配置过滤器即可
[html] view plain copy
filter
filter-nameInitFilter/filter-name
filter-classcom.test.init.InitFilter/filter-class
/filter
filter-mapping
filter-nameInitFilter/filter-name
url-pattern//url-pattern
/filter-mapping
3、编写一个Servlet,在web.xml里面配置容器启动后执行即可
[html] view plain copy
public class InitServlet extends HttpServlet {
/**
*/
private static final long serialVersionUID = 1L;
@Override
public void init(ServletConfig config) {
try {
super.init();
} catch (ServletException e) {
e.printStackTrace();
}
System.out.println("================[Servlet]自动加载启动开始.");
// 读取Spring容器中的Bean[此时Bean已加载,可以使用]
//执行想要的代码
System.out.println("================[Servlet]自动加载启动结束.");
}
}
然后在web.xml文件配置该Servlet的启动方式为:容器启动后执行
servlet
servlet-nameInitServlet/servlet-name
servlet-classcom.test.init.InitServlet/servlet-class
init-param
param-nameusername/param-name
param-valuetest/param-value
/init-param
!-- 此处指定加载顺序为2,表明还有优先级更高的Servlet要先执行 --
load-on-startup2/load-on-startup
/servlet
servlet-mapping
servlet-nameInitServlet/servlet-name
url-pattern//url-pattern
/servlet-mapping
关于启动后执行,由load-on-startup指定:
(1)当值为0或者大于0时,表示容器在应用启动时就加载这个servlet。值越小,启动优先级越高;
(2)当是一个负数时或者没有指定时,表示该servlet被调用时才加载。
4、如果你使用Spring IOC作为Bean管理容器,那么可以指定init-method其中init-method表示bean加载成功后,立即执行某个方法。配置如下:start为要执行的方法名称
[html] view plain copy
!-- service --
bean id="shopService" class="com.test.teach.service.ShopService" span style="color:#33ffff;"init-method="start"/span
property name="shopDao" ref="shopDao" /
/bean
原因就是一句话:先有了父亲,才会有儿子!
程序运行时,加载AB两类,因为A是B子类,所以先加载B类,Load B,再加在A类 LoadA,调用A a = new A()代码时,会先调用其父类B的构造方法 Create B 再调用A的构造方法 Create A