//將applicationContext轉換為ConfigurableApplicationContext
ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) SpringContextUtil.getApplicationContext();
// 獲取bean工廠並轉換為DefaultListableBeanFactory
DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) configurableApplicationContext.getBeanFactory();
// 通過BeanDefinitionBuilder創建bean定義
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(UserController.
class
);
// 設置屬性userService,此屬性引用已經定義的bean:userService,這里userService已經被spring容器管理了.
beanDefinitionBuilder.addPropertyReference(
"userService"
,
"userService"
);
// 注冊bean
defaultListableBeanFactory.registerBeanDefinition(
"userController"
, beanDefinitionBuilder.getRawBeanDefinition());
UserController userController = (UserController) SpringContextUtil.getBean(
"userController"
);
return
userController.toAction(
"動態注冊生成調用"
);
注意applicationContext.xml文件的路徑配置,按自己項目spring配置文件的路徑做相應的調整
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* springApplicationContext工具
*/
public class SpringBeanRegisterUtil {
private static ApplicationContext context=new
ClassPathXmlApplicationContext("applicationContext.xml");
private static ConfigurableApplicationContext configurableContext = (ConfigurableApplicationContext) context;
private static BeanDefinitionRegistry beanDefinitionRegistry = (DefaultListableBeanFactory) configurableContext.getBeanFactory();
/**
* 注冊bean
* @param beanId 所注冊bean的id
* @param className bean的className,
* 三種獲取方式:1、直接書寫,如:com.mvc.entity.User
* 2、User.class.getName
* 3.user.getClass().getName()
*/
public static void registerBean(String beanId,String className) {
// get the BeanDefinitionBuilder
BeanDefinitionBuilder beanDefinitionBuilder =
BeanDefinitionBuilder.genericBeanDefinition(className);
// get the BeanDefinition
BeanDefinition beanDefinition=beanDefinitionBuilder.getBeanDefinition();
// register the bean
beanDefinitionRegistry.registerBeanDefinition(beanId,beanDefinition);
}
/**
* 移除bean
* @param beanId bean的id
*/
public static void unregisterBean(String beanId){
beanDefinitionRegistry.removeBeanDefinition(beanId);
}
/**
* 獲取bean
* @param name bean的id
* @param <T>
* @return
*/
public static <T> T getBean(String name) {
return (T) context.getBean(name);
}
}
---------------------