创建一个springbootUtil类获取springboot上下文,获取springboot上下文中的bean,在bean上执行具体的业务逻辑。 SpringBootUtil.java package springBootPlugin; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; @Component public class SpringBootUtil implements ApplicationContextAware{ private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { if(SpringBootUtil.applicationContext == null) { SpringBootUtil.applicationContext = applicationContext; } } //获取应用上下文。 public static ApplicationContext getApplicationContext() { return applicationContext; } //按名称获取一个 bean。 public static Object getBean(String name){ return getApplicationContext().getBean(name); } //按类获取一个bean。 public static <T> T getBean(Class<T> clazz){ return getApplicationContext().getBean(clazz); } //按名称和 Clazz 返回指定的 bean。 public static <T> T getBean(String name,Class<T> clazz){ return getApplicationContext().getBean(name, clazz); } } 创建一个可以处理任何业务逻辑的简单线程类。 ProjectRealTask.java package springBootPlugin; import org.springframework.stereotype.Component; @Component public class ProjectRealTask implements Runnable { @Override public void run() { System.out.println("test ProjectRealTask"); } } 创建一个主调用类,在调用类中获取springbootUtil中的bean,执行bean内部的业务逻辑,实现对业务逻辑的插件化管理。 ProjectThread.java package springBootPlugin; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component; @Component public class ProjectThread { //这里需要调用一些bean,第三方业务逻辑或者插件。 public void runThreadTaskLogic(){ //创建一个线程池。 ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); taskExecutor.setCorePoolSize(10); taskExecutor.setMaxPoolSize(10); taskExecutor.setQueueCapacity(100); taskExecutor.setThreadNamePrefix("TestExecute_"); taskExecutor.initialize(); //按类名获取 bean。 ProjectRealTask realTask = SpringBootUtil.getBean(ProjectRealTask.class); //具体的 bean 操作。 taskExecutor.submit(realTask); } } 这种方式非常适合多任务、多线程的业务逻辑场景,让bean的管理更加灵活方便。 文章导航 Use Google Protostuff to serialize and deserialize,read and write files very fast. Springboot obtains beans through class names and manages beans through similar plug-ins.