动态根据文件创建类,并纳入spring管理

package com.grgbanking.base.module.springTest.service;


import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;


import org.hibernate.SessionFactory;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.orm.hibernate3.HibernateTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;


import com.grgbanking.base.module.serviceName.dao.ServiceNameDao;
import com.grgbanking.base.module.serviceName.service.ServiceNameService;
import com.grgbanking.platform.core.service.BaseService;
import com.grgbanking.platform.core.spring.SpringContextHolder;


public class StartServiceImpl extends BaseService{
private ApplicationContext context;


public void setApplicationContext(
org.springframework.context.ApplicationContext applicationContext) {
this.context = SpringContextHolder.getApplicationContext();
}


public void addBeanService(String servicePath,String daopath) {
   //获取Service服务名称
String serviceName = servicePath;
String[] tt = serviceName.split("\\.");
serviceName = tt[tt.length-1];
serviceName = serviceName.substring(0,1).toLowerCase()+serviceName.substring(1);
this.context = SpringContextHolder.getApplicationContext();

//获取Dao服务名称
String daoName = daopath;
String[] tt1 = daoName.split("\\.");
daoName = tt1[tt1.length-1];
daoName = daoName.substring(0,1).toLowerCase()+daoName.substring(1);

   //dao注入
Class<?> daoClass = null;
ServiceNameDao dao = null;
try{
daoClass = Class.forName(daopath);//dao.getClass();//getServiceClass(dao.getClass().getName());
dao = (ServiceNameDao)daoClass.newInstance();
}catch(Exception e){

}
 
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder
.genericBeanDefinition(daoClass);
SessionFactory sessionFactory = SpringContextHolder.getBean("sessionFactory");
JdbcTemplate jdbcTemplate = SpringContextHolder.getBean("jdbcTemplate");
     dao.setSessionFactory(sessionFactory);
  dao.setJdbcTemplate(jdbcTemplate);
 
if (context.containsBean(daoName)) {
  deleteBean(daoName,beanDefinitionBuilder.getRawBeanDefinition());
}
registerBean(daoName,
beanDefinitionBuilder.getRawBeanDefinition());

//service注入
//service.getClass();//getServiceClass(dao.getClass().getName());
Class<?> serviceClass = null;
try{
      serviceClass = Class.forName(servicePath);
}catch(Exception e){

}
Method[] methods = serviceClass.getMethods();
          for (Method method : methods) {
              String methodName = method.getName();
                   System.out.println(methodName);
        }
BeanDefinitionBuilder beanDefinitionBuilder1 = BeanDefinitionBuilder
.genericBeanDefinition(serviceClass);
beanDefinitionBuilder1.addPropertyValue(daoName,dao);
beanDefinitionBuilder1.addPropertyReference("contactDao", "contactDao");
if(context.containsBean(serviceName)){
deleteBean(serviceName,beanDefinitionBuilder1.getRawBeanDefinition());
}
registerBean(serviceName,
beanDefinitionBuilder1.getRawBeanDefinition());

//调用测试
// HibernateTransactionManager transactionManager=  SpringContextHolder.getBean("transactionManager");
//     DefaultTransactionDefinition def = new DefaultTransactionDefinition();   
//   TransactionStatus status = transactionManager.getTransaction(def);
//
// ServiceNameService serviceNameService = SpringContextHolder.getBean(serviceName);
// Map<String,Object> serviceNameMap = new HashMap<String,Object>();
// serviceNameMap.put("serviceName", "测试");
// serviceNameService.saveServiceName(serviceNameMap);
//   try {
// transactionManager.commit(status);
// }catch (Exception e) {
//   transactionManager.rollback(status);
// e.printStackTrace();
//   }
 
}


/**
* @desc 向spring容器注册bean
* @param beanName
* @param beanDefinition
*/
private void registerBean(String beanName, BeanDefinition beanDefinition) {
ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) context;
BeanDefinitionRegistry beanDefinitonRegistry = (BeanDefinitionRegistry) configurableApplicationContext
.getBeanFactory();
beanDefinitonRegistry.registerBeanDefinition(beanName, beanDefinition);
}
private void deleteBean(String beanName, BeanDefinition beanDefinition) {
ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) context;
BeanDefinitionRegistry beanDefinitonRegistry = (BeanDefinitionRegistry) configurableApplicationContext
.getBeanFactory();
beanDefinitonRegistry.removeBeanDefinition(beanName);
}
private Class<?> getServiceClass(String className)     {
  try {
return Thread.currentThread().getContextClassLoader().loadClass(className);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
  return null;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值