springboot手动动态注入controller和service
package test;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
@SpringBootApplication
@Component
public class ApplicationBootstrap {
static ApplicationContext applicationContext;
static String file = "F:\\download\\apache-maven-3.3.9-bin\\repository\\org\\example\\springboot-test-common\\1.0-SNAPSHOT\\" +
"springboot-test-common-1.";
public static void main(String[] args) throws Exception {
applicationContext = (, args);
String clazzName = ".MyTestController1";
String clazzName1 = "";
registerBean(clazzName1);
registerBean(clazzName);
registerController((((".") + 1)));
}
public static void registerBean(String clazzName) throws Exception{
URL url = new File(file).toURI().toURL();
// URLClassLoader loader = (URLClassLoader) ();
// Method add = ("addURL", new Class[] { });
// (true);
// (loader, url);
URLClassLoader loader = new URLClassLoader(new URL[]{url});
// String clazzName = ".MyTestController1";
Class<?> clazz = (clazzName);
// ().loadClass("");
// DefaultListableBeanFactory factory = (DefaultListableBeanFactory) ();
BeanDefinitionBuilder beanDefinitionBuilder = (clazz);
BeanDefinition beanDefinition = ();
//设置当前bean定义对象是单利的
("singleton");
//将变量首字母置小写
String beanName = (clazzName);
beanName = ((".")+1);
beanName = (beanName);
//将applicationContext转换为ConfigurableApplicationContext
ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) applicationContext;
// 获取bean工厂并转换为DefaultListableBeanFactory
DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) ();
(beanName, beanDefinition);
}
/**
* 注册Controller
* @param controllerBeanName
* @throws Exception
*/
public static void registerController(String controllerBeanName) throws Exception{
final RequestMappingHandlerMapping requestMappingHandlerMapping=
();
if(requestMappingHandlerMapping!=null){
String handler=controllerBeanName;
Object controller= (handler);
if(controller==null){
return;
}
// unregisterController(controllerBeanName);
//注册Controller
Method method=().getSuperclass().getSuperclass().
getDeclaredMethod("detectHandlerMethods",);
//将private改为可使用
(true);
(requestMappingHandlerMapping,handler);
}
}
/**
* 去掉Controller的Mapping
* @param controllerBeanName
*/
public static void unregisterController(String controllerBeanName){
final RequestMappingHandlerMapping requestMappingHandlerMapping=(RequestMappingHandlerMapping)
("requestMappingHandlerMapping");
if(requestMappingHandlerMapping!=null){
String handler=controllerBeanName;
Object controller= (handler);
if(controller==null){
return;
}
final Class<?> targetClass=();
(targetClass, new () {
public void doWith(Method method) {
Method specificMethod = (method, targetClass);
try {
Method createMappingMethod = .
getDeclaredMethod("getMappingForMethod", , );
(true);
RequestMappingInfo requestMappingInfo =(RequestMappingInfo)
(requestMappingHandlerMapping,specificMethod,targetClass);
if(requestMappingInfo != null) {
(requestMappingInfo);
}
}catch (Exception e){
();
}
}
}, ReflectionUtils.USER_DECLARED_METHODS);
}
}
}
引用
- /topics/392073765
- /w757227129/article/details/93166401?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-2