spring 手動注冊bean


//將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);
}
}
---------------------

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM