spring 通过工厂来创建bean

本文介绍了如何在Spring框架中利用工厂模式获取Bean实例。通过示例代码展示了SpringContextSupport类初始化上下文并获取Bean的过程,同时提供了DAOFactory和服务工厂的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[color=blue] 1: 这个例子中我们使用工厂模式来取的bean。首先我们来获取context

public class SpringContextSupport implements ServletContextAware {

private static Object initObj = null;

private static int count = 0;

private static ApplicationContext context;

public static void init(Object o) {
initObj = o;
count++;
}

/**
*
* gets the instance from the beanId
*
* @param object
* @return void
*/
public static Object getBean(String beanName) {
return getApplicationContext().getBean(beanName);
}

/**
*
* returns applicationContext based on initObj
*
* @return ApplicationContext
*/
public static ApplicationContext getApplicationContext() {
if (initObj == null) {
throw new IllegalStateException(
"Application context not initialized");
} else if (initObj instanceof ServletContext) {
ServletContext servletContext = (ServletContext) initObj;
return WebApplicationContextUtils
.getRequiredWebApplicationContext(servletContext);

} else if (initObj instanceof String) {
if (context == null) {
context = new FileSystemXmlApplicationContext(
Constants.FILE_CONTEXT_PATH);
}
return context;
} else {
throw new IllegalStateException(
"You must initialize the context with a String");
}
}

/**
*
* initializes servletContext
*
* @param context
* @return void
*/
public void setServletContext(ServletContext context) {
init(context);
}

public static void initializeStandalone() {
init("StandAlone");
}


/**
*
* initializes servletContext for bid board batch
*
* @param context
* @return void
*/
public static void initBidBoardBatch() {
init( Constants.BB_BATCH_STARTUP);
}
}

备注: String FILE_CONTEXT_PATH = "WEB-INF/conf/user-services.xml";
那么在这个文件中就是我们配置的bean
2: 具体通过工厂是方法来取得我们所需要的bean
public class DAOFactory {
public UserDAO getUserDAO() throws Exception {
UserDAO userDAO = null;
try {
userDAO = (UserDAO) SpringContextSupport
.getBean(DAOConstants.USER_DAO);
} catch (Exception exception) {
throw exception;
}
return userDAO;
}
}

3: 那么我们想对应的service工厂模式的创建也类似:如下:
public class CommonServiceFactory {
public CommonService getCommonService() throws BBSystemException {
CommonService commonService = null;

commonService =
(CommonService) SpringContextSupport
.getBean(BBServiceConstants.COMMON_SERVICE);

if (null == commonService) {
throw BBUtil.getBBSystemException(BBMessageConstants.OBJECTS_NULL);
}
return commonService;
}
}
[/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值