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;
}
}
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;
}
}