定义任务接口
/**
* 任务接口
*
* @author xiehui1956@gmail.com on
* @version 1.0.0
* @date 2021/8/28
*/
public interface IDynamicTaskNode {
/**
* 执行方法的入口
*/
void task();
}
定义任务实现
/**
* TODO
*
* @author xiehui1956@gmail.com on
* @version 1.0.0
* @date 2021/8/29
*/
@Service
public class DynamicTaskStudentSayHiImpl implements IDynamicTaskNode {
private IUserService iUserService;
public DynamicTaskStudentSayHiImpl(IUserService iUserService) {
this.iUserService = iUserService;
}
@Override
public void task() {
iUserService.sayHi();
}
}
定义业务接口
/**
* 业务接口
*
* @author xiehui1956@gmail.com on
* @version 1.0.0
* @date 2021/8/29
*/
public interface IUserService {
void sayHi();
}
定义业务实现
/**
* TODO
*
* @author xiehui1956@gmail.com on
* @version 1.0.0
* @date 2021/8/29
*/
@Service
public class UserServiceImpl implements IUserService, IDynamicTaskNode {
@Override
public void sayHi() {
System.out.println("Hi, I am student!");
}
@Override
public void task() {
sayHi();
}
}
定义BeanUtils
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* TODO
*
* @author xiehui1956@gmail.com on
* @version 1.0.0
* @date 2021/8/29
*/
@Component
public class BeanUtils implements ApplicationContextAware {
private static ApplicationContext applicationContext;
public static <T> T getBean(Class<T> bean) {
return applicationContext.getBean(bean);
}
public static <T> T getBean(String var1, Class<T> var2) {
return applicationContext.getBean(var1, var2);
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
BeanUtils.applicationContext = applicationContext;
}
}
执行入口
/**
* Created by xiehui1956(@)gmail.com on 2020/3/13
*/
@SpringBootApplication
public class SsoServiceApplication {
@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> cookieProcessorCustomizer() {
return (factory) -> factory.addContextCustomizers(
(context) -> context.setCookieProcessor(new LegacyCookieProcessor()));
}
public static void main(String[] args) throws Exception {
SpringApplication.run(SsoServiceApplication.class, args);
String interfacePath = "com.sso.mysso.ssoservice.dyn.IDynamicTaskNode", serviceName = "dynamicTaskStudentSayHiImpl";
dynamicMethod(interfacePath, serviceName);
}
public static void dynamicMethod(String interfacePath, String serviceName) throws Exception {
Class<?> aClass = Class.forName(interfacePath);
Object taskNode = BeanUtils.getBean(serviceName, aClass);
taskNode.getClass().getDeclaredMethod("task").invoke(taskNode);
}
}