1 自定义@DavidSpringBootApplication
package com.david.springboot;
import org.springframework.context.annotation.ComponentScan;
import java.lang.annotation.*;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@ComponentScan
public @interface DavidSpringBootApplication{
}
2、自定义SpringBootApplication
public class DavidSpringApplication {
public static void run(Class clazz) {
//1、创建一个容器
AnnotationConfigWebApplicationContext applicationContext=new AnnotationConfigWebApplicationContext();
applicationContext.register(clazz);
applicationContext.refresh();
String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
for (String beanName:beanDefinitionNames) {
System.out.println("beanName------------------>"+beanName);
}
//2、启动Tomcat
System.out.println("startTomcat");
startTomcat(applicationContext,"localhost",8080);
// startTomcat();
System.out.println("startTomcat end");
}
public static void startTomcat(WebApplicationContext webApplicationContext,String hostname, Integer port) {
Tomcat tomcat = new Tomcat();
Server server = tomcat.getServer();
Service service = server.findService("Tomcat");
Connector connector = new Connector();
connector.setPort(port);
Engine engine = new StandardEngine();
engine.setDefaultHost(hostname);
Host host = new StandardHost();
host.setName(hostname);
String contextPath = "";
Context context = new StandardContext();
context.setPath(contextPath);
context.addLifecycleListener(new Tomcat.FixContextListener());
host.addChild(context);
engine.addChild(host);
service.setContainer(engine);
service.addConnector(connector);
// 接收到的所有请求最终都会转发到 DispatcherServlet 上面去处理
tomcat.addServlet(contextPath, "dispatcher", new DispatcherServlet(webApplicationContext));
context.addServletMappingDecoded("/*", "dispatcher");
try {
tomcat.start();
tomcat.getServer().await();
} catch (LifecycleException e) {
e.printStackTrace();
}
}
}