建立com.wsc.service 包,并建立HelloService,HelloServiceExt,HelloServiceImpl,AbstractHelloService
package com.atguigu.service;
public interface HelloService {
}
package com.atguigu.service;
public interface HelloServiceExt extends HelloService {
}
package com.atguigu.service;
public class HelloServiceImpl implements HelloService {
}
package com.atguigu.service;
public abstract class AbstractHelloService implements HelloService {
}
在servlet3.0項目中建立META-INF\services目錄,在該目錄下建立javax.servlet.ServletContainerInitializerz檔案,
指定啟動時加載的類,
com.wsc.servlet.MyServletContainerInitializer
在com.wsc.servlet 中建立MyServletContainerInitializer
package com.wsc.servlet;
import java.util.Set;
import javax.servlet.ServletContainerInitializer;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.HandlesTypes;
import com.wsc.service.HelloService;
//容器啟動的時候會将@HandlesTypes指定的這個類型下面的子類(實作類,子接口等)傳遞過來;
//傳入感興趣的類型;
@HandlesTypes(value={HelloService.class})
public class MyServletContainerInitializer implements ServletContainerInitializer {
/**
* 應用啟動的時候,會運作onStartup方法;
*
* Set<Class<?>> arg0:感興趣的類型的所有子類型;
* ServletContext arg1:代表目前Web應用的ServletContext;一個Web應用一個ServletContext;
*
* 1)、使用ServletContext注冊Web元件(Servlet、Filter、Listener)
* 2)、使用編碼的方式,在項目啟動的時候給ServletContext裡面添加元件;
* 必須在項目啟動的時候來添加;
* 1)、ServletContainerInitializer得到的ServletContext;
* 2)、ServletContextListener得到的ServletContext;
*/
@Override
public void onStartup(Set<Class<?>> arg0, ServletContext sc) throws ServletException {
// TODO Auto-generated method stub
System.out.println("感興趣的類型:");
for (Class<?> claz : arg0) {
System.out.println(claz);
}
}
}
運作servlet3.0項目,可看到:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL2QzN2UDMyIjM1EjMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
----------------------------------------------------------