Sfoglia il codice sorgente

spring加载完成后反射调用所有@service的initMapper()方法,实现service自动实现所有mapper接口

shuzheng 9 anni fa
parent
commit
df46c84ccd

+ 3 - 1
zheng-common/src/main/java/com/zheng/common/base/BaseService.java

@@ -40,6 +40,8 @@ public interface BaseService<Record, Example> {
 
 	int deleteByPrimaryKeys(String ids);
 
-	void initMapper(Class clazz);
+	//void initMapper(Class clazz);
+
+	void initMapper();
 
 }

+ 16 - 3
zheng-common/src/main/java/com/zheng/common/base/BaseServiceImpl.java

@@ -4,8 +4,8 @@ import com.zheng.common.util.SpringContextUtil;
 import org.apache.commons.lang.StringUtils;
 import org.apache.ibatis.annotations.Param;
 
-import java.io.Serializable;
 import java.lang.reflect.Method;
+import java.lang.reflect.ParameterizedType;
 import java.util.List;
 
 /**
@@ -207,9 +207,22 @@ public abstract class BaseServiceImpl<Mapper, Record, Example> implements BaseSe
 		return 0;
 	}
 
+//	@Override
+//	public void initMapper(Class clazz) {
+//		this.mapper = (Mapper) SpringContextUtil.getBean(clazz);
+//	}
+
 	@Override
-	public void initMapper(Class clazz) {
-		this.mapper = (Mapper) SpringContextUtil.getBean(clazz);
+	public void initMapper() {
+		this.mapper = SpringContextUtil.getBean(getMapperClass());
+	}
+
+	/**
+	 * 获取类泛型class
+	 * @return
+	 */
+	public Class<Mapper> getMapperClass() {
+		return (Class<Mapper>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
 	}
 
 }

+ 5 - 0
zheng-upms/zheng-upms-rpc-service/src/main/java/com/zheng/upms/rpc/service/impl/UpmsSystemServiceImpl.java

@@ -25,4 +25,9 @@ public class UpmsSystemServiceImpl extends BaseServiceImpl<UpmsSystemMapper, Upm
     UpmsSystemMapper upmsSystemMapper;
 
 
+    public static void main(String[] args) {
+        String s = null;
+        System.out.println(s.getClass());
+    }
+
 }

+ 39 - 0
zheng-upms/zheng-upms-rpc-service/src/main/java/com/zheng/upms/rpc/service/listener/ApplicationContextListener.java

@@ -0,0 +1,39 @@
+package com.zheng.upms.rpc.service.listener;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.ApplicationListener;
+import org.springframework.context.event.ContextRefreshedEvent;
+import org.springframework.stereotype.Service;
+
+import java.lang.reflect.Method;
+import java.util.Map;
+
+/**
+ * spring容器初始化完成事件
+ * Created by shuzheng on 2017/1/7.
+ */
+public class ApplicationContextListener implements ApplicationListener<ContextRefreshedEvent> {
+
+    private static Logger _log = LoggerFactory.getLogger(ApplicationContextListener.class);
+
+    @Override
+    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
+        // root application context
+        if(null == contextRefreshedEvent.getApplicationContext().getParent()) {
+            _log.info(">>>>> spring初始化完毕");
+            // spring初始化完毕后,通过反射调用所有service的initMapper方法
+            Map<String, Object> services = contextRefreshedEvent.getApplicationContext().getBeansWithAnnotation(Service.class);
+            for(Object service : services.values()) {
+                try {
+                    Method initMapper = service.getClass().getDeclaredMethod("initMapper");
+                    initMapper.invoke(service);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+            _log.info(">>>>> 初始化完成service的initMapper方法");
+        }
+    }
+
+}

+ 1 - 13
zheng-upms/zheng-upms-rpc-service/src/main/resources/applicationContext-dubbo-provider.xml

@@ -15,16 +15,4 @@
 
     <bean id="upmsSystemServiceImpl" class="com.zheng.upms.rpc.service.impl.UpmsSystemServiceImpl"/>
     <dubbo:service interface="com.zheng.upms.rpc.api.UpmsSystemService" ref="upmsSystemServiceImpl"/>
-</beans> 
-
-
-
-
-
-
-
-
-
-
-
-
+</beans>

+ 11 - 0
zheng-upms/zheng-upms-rpc-service/src/main/resources/applicationContext-listener.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="
+          http://www.springframework.org/schema/beans
+          http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+    <!-- Spring容器初始化完成监听器 -->
+    <bean class="com.zheng.upms.rpc.service.listener.ApplicationContextListener"></bean>
+
+</beans>

+ 0 - 1
zheng-upms/zheng-upms-server/src/main/java/com/zheng/upms/admin/controller/SSOController.java

@@ -55,7 +55,6 @@ public class SSOController {
 		UpmsSystemExample upmsSystemExample = new UpmsSystemExample();
 		upmsSystemExample.createCriteria()
 				.andNameEqualTo(system_name);
-		upmsSystemService.initMapper(UpmsSystemMapper.class);
 		int count = upmsSystemService.countByExample(upmsSystemExample);
 		if (StringUtils.isEmpty(system_name) || 0 == count) {
 			_log.info("未注册的系统:{}", system_name);