创建一个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的管理更加灵活方便。
0票
开心
0票
板砖
0票
感动
0票
有用
0票
疑问
0票
难过
0票
无聊
0票
震惊