diff --git a/.gitignore b/.gitignore index f39f98cfffc9fdced1b33851e94834b7d6637b9c..6ba78a6cc796667c6d265c8a46ef829513591072 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ /itstack-demo-design-1-00/itstack-demo-design-1-00.iml /itstack-demo-design-1-01/itstack-demo-design-1-01.iml /itstack-demo-design-1-02/itstack-demo-design-1-02.iml +/itstack-demo-design-2-00/itstack-demo-design-2-00.iml +/itstack-demo-design-2-02/itstack-demo-design-2-02.iml diff --git a/itstack-demo-design-2-00/pom.xml b/itstack-demo-design-2-00/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..67c50ad40c8c39a7cf464df57e3647db2cf063c6 --- /dev/null +++ b/itstack-demo-design-2-00/pom.xml @@ -0,0 +1,15 @@ + + + + itstack-demo-design + org.itstack + 1.0-SNAPSHOT + + 4.0.0 + + itstack-demo-design-2-00 + + + \ No newline at end of file diff --git a/itstack-demo-design-2-00/src/main/java/org/itstack/demo/design/CacheService.java b/itstack-demo-design-2-00/src/main/java/org/itstack/demo/design/CacheService.java new file mode 100755 index 0000000000000000000000000000000000000000..2bd4cf608a48ee0ed0e8e87a52623ae5e2771e50 --- /dev/null +++ b/itstack-demo-design-2-00/src/main/java/org/itstack/demo/design/CacheService.java @@ -0,0 +1,15 @@ +package org.itstack.demo.design; + +import java.util.concurrent.TimeUnit; + +public interface CacheService { + + String get(final String key); + + void set(String key, String value); + + void set(String key, String value, long timeout, TimeUnit timeUnit); + + void del(String key); + +} diff --git a/itstack-demo-design-2-00/src/main/java/org/itstack/demo/design/RedisUtils.java b/itstack-demo-design-2-00/src/main/java/org/itstack/demo/design/RedisUtils.java new file mode 100755 index 0000000000000000000000000000000000000000..33b0e055efc7ce2a0d446e796aa593bd608857f5 --- /dev/null +++ b/itstack-demo-design-2-00/src/main/java/org/itstack/demo/design/RedisUtils.java @@ -0,0 +1,36 @@ +package org.itstack.demo.design; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; + +public class RedisUtils { + + private Logger logger = LoggerFactory.getLogger(RedisUtils.class); + + private Map dataMap = new ConcurrentHashMap(); + + public String get(String key) { + logger.info("Redis获取数据 key:{}", key); + return dataMap.get(key); + } + + public void set(String key, String value) { + logger.info("Redis写入数据 key:{} val:{}", key, value); + dataMap.put(key, value); + } + + public void set(String key, String value, long timeout, TimeUnit timeUnit) { + logger.info("Redis写入数据 key:{} val:{} timeout:{} timeUnit:{}", key, value, timeout, timeUnit.toString()); + dataMap.put(key, value); + } + + public void del(String key) { + logger.info("Redis删除数据 key:{}", key); + dataMap.remove(key); + } + +} diff --git a/itstack-demo-design-2-00/src/main/java/org/itstack/demo/design/impl/CacheServiceImpl.java b/itstack-demo-design-2-00/src/main/java/org/itstack/demo/design/impl/CacheServiceImpl.java new file mode 100755 index 0000000000000000000000000000000000000000..1a44ec6338a1c0b2c148bc4f398f0af722035420 --- /dev/null +++ b/itstack-demo-design-2-00/src/main/java/org/itstack/demo/design/impl/CacheServiceImpl.java @@ -0,0 +1,28 @@ +package org.itstack.demo.design.impl; + +import org.itstack.demo.design.CacheService; +import org.itstack.demo.design.RedisUtils; + +import java.util.concurrent.TimeUnit; + +public class CacheServiceImpl implements CacheService { + + private RedisUtils redisUtils = new RedisUtils(); + + public String get(String key) { + return redisUtils.get(key); + } + + public void set(String key, String value) { + redisUtils.set(key, value); + } + + public void set(String key, String value, long timeout, TimeUnit timeUnit) { + redisUtils.set(key, value, timeout, timeUnit); + } + + public void del(String key) { + redisUtils.del(key); + } + +} diff --git a/itstack-demo-design-2-00/src/main/java/org/itstack/demo/design/matter/EGM.java b/itstack-demo-design-2-00/src/main/java/org/itstack/demo/design/matter/EGM.java new file mode 100755 index 0000000000000000000000000000000000000000..5701ca8f9fd408767de5f083f063523cc4e1c66e --- /dev/null +++ b/itstack-demo-design-2-00/src/main/java/org/itstack/demo/design/matter/EGM.java @@ -0,0 +1,35 @@ +package org.itstack.demo.design.matter; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; + +public class EGM { + + private Logger logger = LoggerFactory.getLogger(EGM.class); + + private Map dataMap = new ConcurrentHashMap(); + + public String gain(String key) { + logger.info("EGM获取数据 key:{}", key); + return dataMap.get(key); + } + + public void set(String key, String value) { + logger.info("EGM写入数据 key:{} val:{}", key, value); + dataMap.put(key, value); + } + + public void setEx(String key, String value, long timeout, TimeUnit timeUnit) { + logger.info("EGM写入数据 key:{} val:{} timeout:{} timeUnit:{}", key, value, timeout, timeUnit.toString()); + dataMap.put(key, value); + } + + public void delete(String key) { + logger.info("EGM删除数据 key:{}", key); + dataMap.remove(key); + } +} diff --git a/itstack-demo-design-2-00/src/main/java/org/itstack/demo/design/matter/IIR.java b/itstack-demo-design-2-00/src/main/java/org/itstack/demo/design/matter/IIR.java new file mode 100755 index 0000000000000000000000000000000000000000..bda4de4d31a31cfdef27ce1a9e39262e742d55ff --- /dev/null +++ b/itstack-demo-design-2-00/src/main/java/org/itstack/demo/design/matter/IIR.java @@ -0,0 +1,36 @@ +package org.itstack.demo.design.matter; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; + +public class IIR { + + private Logger logger = LoggerFactory.getLogger(IIR.class); + + private Map dataMap = new ConcurrentHashMap(); + + public String get(String key) { + logger.info("IIR获取数据 key:{}", key); + return dataMap.get(key); + } + + public void set(String key, String value) { + logger.info("IIR写入数据 key:{} val:{}", key, value); + dataMap.put(key, value); + } + + public void setExpire(String key, String value, long timeout, TimeUnit timeUnit) { + logger.info("IIR写入数据 key:{} val:{} timeout:{} timeUnit:{}", key, value, timeout, timeUnit.toString()); + dataMap.put(key, value); + } + + public void del(String key) { + logger.info("IIR删除数据 key:{}", key); + dataMap.remove(key); + } + +} diff --git a/itstack-demo-design-2-01/pom.xml b/itstack-demo-design-2-01/pom.xml new file mode 100755 index 0000000000000000000000000000000000000000..1325e9d7bed720fb7fedf4a56b7a1036a9992761 --- /dev/null +++ b/itstack-demo-design-2-01/pom.xml @@ -0,0 +1,22 @@ + + + + itstack-demo-design + org.itstack + 1.0-SNAPSHOT + + 4.0.0 + + itstack-demo-design-2-01 + + + + org.itstack + itstack-demo-design-2-00 + 1.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/itstack-demo-design-2-01/src/main/java/org/itstack/demo/design/CacheService.java b/itstack-demo-design-2-01/src/main/java/org/itstack/demo/design/CacheService.java new file mode 100755 index 0000000000000000000000000000000000000000..60c7dbf328c2cc55f5b901cdbd6dd0986cd4fd57 --- /dev/null +++ b/itstack-demo-design-2-01/src/main/java/org/itstack/demo/design/CacheService.java @@ -0,0 +1,15 @@ +package org.itstack.demo.design; + +import java.util.concurrent.TimeUnit; + +public interface CacheService { + + String get(final String key, int redisType); + + void set(String key, String value, int redisType); + + void set(String key, String value, long timeout, TimeUnit timeUnit, int redisType); + + void del(String key, int redisType); + +} diff --git a/itstack-demo-design-2-01/src/main/java/org/itstack/demo/design/impl/CacheServiceImpl.java b/itstack-demo-design-2-01/src/main/java/org/itstack/demo/design/impl/CacheServiceImpl.java new file mode 100755 index 0000000000000000000000000000000000000000..c7889d29c0aef154859b6d536d78c2b029a413b7 --- /dev/null +++ b/itstack-demo-design-2-01/src/main/java/org/itstack/demo/design/impl/CacheServiceImpl.java @@ -0,0 +1,77 @@ +package org.itstack.demo.design.impl; + +import org.itstack.demo.design.RedisUtils; +import org.itstack.demo.design.matter.EGM; +import org.itstack.demo.design.matter.IIR; +import org.itstack.demo.design.CacheService; + +import java.util.concurrent.TimeUnit; + +public class CacheServiceImpl implements CacheService { + + private RedisUtils redisUtils = new RedisUtils(); + + private EGM egm = new EGM(); + + private IIR iir = new IIR(); + + public String get(String key, int redisType) { + + if (1 == redisType) { + return egm.gain(key); + } + + if (2 == redisType) { + return iir.get(key); + } + + return redisUtils.get(key); + } + + public void set(String key, String value, int redisType) { + + if (1 == redisType) { + egm.set(key, value); + return; + } + + if (2 == redisType) { + iir.set(key, value); + return; + } + + redisUtils.set(key, value); + } + + public void set(String key, String value, long timeout, TimeUnit timeUnit, int redisType) { + + if (1 == redisType) { + egm.setEx(key, value, timeout, timeUnit); + return; + } + + if (2 == redisType) { + iir.setExpire(key, value, timeout, timeUnit); + return; + } + + redisUtils.set(key, value, timeout, timeUnit); + } + + public void del(String key, int redisType) { + + if (1 == redisType) { + egm.delete(key); + return; + } + + if (2 == redisType) { + iir.del(key); + return; + } + + redisUtils.del(key); + } + + +} diff --git a/itstack-demo-design-2-01/src/test/java/org/itstack/demo/design/test/ApiTest.java b/itstack-demo-design-2-01/src/test/java/org/itstack/demo/design/test/ApiTest.java new file mode 100755 index 0000000000000000000000000000000000000000..16d44c10cdc8090d0a79abec5532606f25c7e8ab --- /dev/null +++ b/itstack-demo-design-2-01/src/test/java/org/itstack/demo/design/test/ApiTest.java @@ -0,0 +1,20 @@ +package org.itstack.demo.design.test; + +import org.itstack.demo.design.CacheService; +import org.itstack.demo.design.impl.CacheServiceImpl; +import org.junit.Test; + +public class ApiTest { + + @Test + public void test_CacheService() { + + CacheService cacheService = new CacheServiceImpl(); + + cacheService.set("user_name_01", "小傅哥", 1); + String val01 = cacheService.get("user_name_01", 1); + System.out.println("测试结果:" + val01); + + } + +} diff --git a/itstack-demo-design-2-02/pom.xml b/itstack-demo-design-2-02/pom.xml new file mode 100755 index 0000000000000000000000000000000000000000..66cb5f04f87797ec7c611dd9fdaa173ea987bd78 --- /dev/null +++ b/itstack-demo-design-2-02/pom.xml @@ -0,0 +1,22 @@ + + + + itstack-demo-design + org.itstack + 1.0-SNAPSHOT + + 4.0.0 + + itstack-demo-design-2-02 + + + + org.itstack + itstack-demo-design-2-00 + 1.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/CacheService.java b/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/CacheService.java new file mode 100755 index 0000000000000000000000000000000000000000..8b7f30a8e4fd4a3501429e85c5b25630cb0dd683 --- /dev/null +++ b/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/CacheService.java @@ -0,0 +1,15 @@ +package org.itstack.demo.desgin; + +import java.util.concurrent.TimeUnit; + +public interface CacheService { + + String get(final String key); + + void set(String key, String value); + + void set(String key, String value, long timeout, TimeUnit timeUnit); + + void del(String key); + +} diff --git a/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/factory/ICacheAdapter.java b/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/factory/ICacheAdapter.java new file mode 100755 index 0000000000000000000000000000000000000000..5d7c392a51a853bba2e4cb0892487f6a83a986ea --- /dev/null +++ b/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/factory/ICacheAdapter.java @@ -0,0 +1,15 @@ +package org.itstack.demo.desgin.factory; + +import java.util.concurrent.TimeUnit; + +public interface ICacheAdapter { + + String get(String key); + + void set(String key, String value); + + void set(String key, String value, long timeout, TimeUnit timeUnit); + + void del(String key); + +} diff --git a/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/factory/JDKInvocationHandler.java b/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/factory/JDKInvocationHandler.java new file mode 100755 index 0000000000000000000000000000000000000000..36413409706f193c46d093beca01f13cf4474153 --- /dev/null +++ b/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/factory/JDKInvocationHandler.java @@ -0,0 +1,20 @@ +package org.itstack.demo.desgin.factory; + +import org.itstack.demo.desgin.util.ClassLoaderUtils; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; + +public class JDKInvocationHandler implements InvocationHandler { + + private ICacheAdapter cacheAdapter; + + public JDKInvocationHandler(ICacheAdapter cacheAdapter) { + this.cacheAdapter = cacheAdapter; + } + + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + return ICacheAdapter.class.getMethod(method.getName(), ClassLoaderUtils.getClazzByArgs(args)).invoke(cacheAdapter, args); + } + +} diff --git a/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/factory/JDKProxy.java b/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/factory/JDKProxy.java new file mode 100755 index 0000000000000000000000000000000000000000..fc85656aae9e6aafc27e04c6e9ad9fbcbb76c4dd --- /dev/null +++ b/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/factory/JDKProxy.java @@ -0,0 +1,15 @@ +package org.itstack.demo.desgin.factory; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Proxy; + +public class JDKProxy { + + public static T getProxy(Class interfaceClass, ICacheAdapter cacheAdapter) throws Exception { + InvocationHandler handler = new JDKInvocationHandler(cacheAdapter); + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + Class[] classes = interfaceClass.getInterfaces(); + return (T) Proxy.newProxyInstance(classLoader, new Class[]{classes[0]}, handler); + } + +} diff --git a/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/factory/impl/EGMCacheAdapter.java b/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/factory/impl/EGMCacheAdapter.java new file mode 100755 index 0000000000000000000000000000000000000000..18be266c76b561eaba449b0f67af15a86029968e --- /dev/null +++ b/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/factory/impl/EGMCacheAdapter.java @@ -0,0 +1,27 @@ +package org.itstack.demo.desgin.factory.impl; + +import org.itstack.demo.desgin.factory.ICacheAdapter; +import org.itstack.demo.design.matter.EGM; + +import java.util.concurrent.TimeUnit; + +public class EGMCacheAdapter implements ICacheAdapter { + + private EGM egm = new EGM(); + + public String get(String key) { + return egm.gain(key); + } + + public void set(String key, String value) { + egm.set(key, value); + } + + public void set(String key, String value, long timeout, TimeUnit timeUnit) { + egm.setEx(key, value, timeout, timeUnit); + } + + public void del(String key) { + egm.delete(key); + } +} diff --git a/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/factory/impl/IIRCacheAdapter.java b/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/factory/impl/IIRCacheAdapter.java new file mode 100755 index 0000000000000000000000000000000000000000..5305c205b02899ee4605a5264a8dc3454f3bc3dc --- /dev/null +++ b/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/factory/impl/IIRCacheAdapter.java @@ -0,0 +1,28 @@ +package org.itstack.demo.desgin.factory.impl; + +import org.itstack.demo.desgin.factory.ICacheAdapter; +import org.itstack.demo.design.matter.IIR; + +import java.util.concurrent.TimeUnit; + +public class IIRCacheAdapter implements ICacheAdapter { + + private IIR iir = new IIR(); + + public String get(String key) { + return iir.get(key); + } + + public void set(String key, String value) { + iir.set(key, value); + } + + public void set(String key, String value, long timeout, TimeUnit timeUnit) { + iir.setExpire(key, value, timeout, timeUnit); + } + + public void del(String key) { + iir.del(key); + } + +} diff --git a/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/impl/CacheServiceImpl.java b/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/impl/CacheServiceImpl.java new file mode 100755 index 0000000000000000000000000000000000000000..5aa8d04db914330f1fba03dd9f91f05326cd6b0f --- /dev/null +++ b/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/impl/CacheServiceImpl.java @@ -0,0 +1,28 @@ +package org.itstack.demo.desgin.impl; + +import org.itstack.demo.desgin.CacheService; +import org.itstack.demo.design.RedisUtils; + +import java.util.concurrent.TimeUnit; + +public class CacheServiceImpl implements CacheService { + + private RedisUtils redisUtils = new RedisUtils(); + + public String get(String key) { + return redisUtils.get(key); + } + + public void set(String key, String value) { + redisUtils.set(key, value); + } + + public void set(String key, String value, long timeout, TimeUnit timeUnit) { + redisUtils.set(key, value, timeout, timeUnit); + } + + public void del(String key) { + redisUtils.del(key); + } + +} diff --git a/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/util/ClassLoaderUtils.java b/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/util/ClassLoaderUtils.java new file mode 100755 index 0000000000000000000000000000000000000000..d77764a6a8864fb4426b984b33106dff1bd2388e --- /dev/null +++ b/itstack-demo-design-2-02/src/main/java/org/itstack/demo/desgin/util/ClassLoaderUtils.java @@ -0,0 +1,186 @@ +package org.itstack.demo.desgin.util; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; +import java.util.concurrent.TimeUnit; + +public class ClassLoaderUtils { + + private static Set primitiveSet = new HashSet(); + + static { + primitiveSet.add(Integer.class); + primitiveSet.add(Long.class); + primitiveSet.add(Float.class); + primitiveSet.add(Byte.class); + primitiveSet.add(Short.class); + primitiveSet.add(Double.class); + primitiveSet.add(Character.class); + primitiveSet.add(Boolean.class); + } + + /** + * 得到当前ClassLoader + * + * @return ClassLoader + */ + public static ClassLoader getCurrentClassLoader() { + ClassLoader cl = Thread.currentThread().getContextClassLoader(); + if (cl == null) { + cl = ClassLoaderUtils.class.getClassLoader(); + } + return cl == null ? ClassLoader.getSystemClassLoader() : cl; + } + + /** + * 得到当前ClassLoader + * + * @param clazz 某个类 + * @return ClassLoader + */ + public static ClassLoader getClassLoader(Class clazz) { + ClassLoader loader = Thread.currentThread().getContextClassLoader(); + if (loader != null) { + return loader; + } + if (clazz != null) { + loader = clazz.getClassLoader(); + if (loader != null) { + return loader; + } + return clazz.getClassLoader(); + } + return ClassLoader.getSystemClassLoader(); + } + + /** + * 根据类名加载Class + * + * @param className 类名 + * @return Class + * @throws ClassNotFoundException 找不到类 + */ + public static Class forName(String className) + throws ClassNotFoundException { + return forName(className, true); + } + + /** + * 根据类名加载Class + * + * @param className 类名 + * @param initialize 是否初始化 + * @return Class + * @throws ClassNotFoundException 找不到类 + */ + public static Class forName(String className, boolean initialize) + throws ClassNotFoundException { + return Class.forName(className, initialize, getCurrentClassLoader()); + } + + /** + * 根据类名加载Class + * + * @param className 类名 + * @param cl Classloader + * @return Class + * @throws ClassNotFoundException 找不到类 + */ + public static Class forName(String className, ClassLoader cl) + throws ClassNotFoundException { + return Class.forName(className, true, cl); + } + + /** + * 实例化一个对象(只检测默认构造函数,其它不管) + * + * @param clazz 对象类 + * @param 对象具体类 + * @return 对象实例 + * @throws Exception 没有找到方法,或者无法处理,或者初始化方法异常等 + */ + public static T newInstance(Class clazz) throws Exception { + if (primitiveSet.contains(clazz)) { + return null; + } + if (clazz.isMemberClass() && !Modifier.isStatic(clazz.getModifiers())) { + Constructor constructorList[] = clazz.getDeclaredConstructors(); + Constructor defaultConstructor = null; + for (Constructor con : constructorList) { + if (con.getParameterTypes().length == 1) { + defaultConstructor = con; + break; + } + } + if (defaultConstructor != null) { + if (defaultConstructor.isAccessible()) { + return (T) defaultConstructor.newInstance(new Object[]{null}); + } else { + try { + defaultConstructor.setAccessible(true); + return (T) defaultConstructor.newInstance(new Object[]{null}); + } finally { + defaultConstructor.setAccessible(false); + } + } + } else { + throw new Exception("The " + clazz.getCanonicalName() + " has no default constructor!"); + } + } + try { + return clazz.newInstance(); + } catch (Exception e) { + Constructor constructor = clazz.getDeclaredConstructor(); + if (constructor.isAccessible()) { + throw new Exception("The " + clazz.getCanonicalName() + " has no default constructor!", e); + } else { + try { + constructor.setAccessible(true); + return constructor.newInstance(); + } finally { + constructor.setAccessible(false); + } + } + } + } + + public static Class[] getClazzByArgs(Object[] args) { + Class[] parameterTypes = new Class[args.length]; + for (int i = 0; i < args.length; i++) { + if (args[i] instanceof ArrayList) { + parameterTypes[i] = List.class; + continue; + } + if (args[i] instanceof LinkedList) { + parameterTypes[i] = List.class; + continue; + } + if (args[i] instanceof HashMap) { + parameterTypes[i] = Map.class; + continue; + } + if (args[i] instanceof Long){ + parameterTypes[i] = long.class; + continue; + } + if (args[i] instanceof Double){ + parameterTypes[i] = double.class; + continue; + } + if (args[i] instanceof TimeUnit){ + parameterTypes[i] = TimeUnit.class; + continue; + } + parameterTypes[i] = args[i].getClass(); + } + return parameterTypes; + } + + public Method getMethod(Class classType, String methodName, Class... parameterTypes) throws NoSuchMethodException { + return classType.getMethod(methodName, parameterTypes); + } + +} + diff --git a/itstack-demo-design-2-02/src/test/java/org/itstack/demo/desgin/test/ApiTest.java b/itstack-demo-design-2-02/src/test/java/org/itstack/demo/desgin/test/ApiTest.java new file mode 100755 index 0000000000000000000000000000000000000000..2656b9330ca04652a1459f18d36ce91422f15d55 --- /dev/null +++ b/itstack-demo-design-2-02/src/test/java/org/itstack/demo/desgin/test/ApiTest.java @@ -0,0 +1,27 @@ +package org.itstack.demo.desgin.test; + +import org.itstack.demo.desgin.CacheService; +import org.itstack.demo.desgin.factory.JDKProxy; +import org.itstack.demo.desgin.factory.impl.EGMCacheAdapter; +import org.itstack.demo.desgin.factory.impl.IIRCacheAdapter; +import org.itstack.demo.desgin.impl.CacheServiceImpl; +import org.junit.Test; + +public class ApiTest { + + @Test + public void test_CacheService() throws Exception { + + CacheService proxy_EGM = JDKProxy.getProxy(CacheServiceImpl.class, new EGMCacheAdapter()); + proxy_EGM.set("user_name_01", "小傅哥"); + String val01 = proxy_EGM.get("user_name_01"); + System.out.println("测试结果:" + val01); + + CacheService proxy_IIR = JDKProxy.getProxy(CacheServiceImpl.class, new IIRCacheAdapter()); + proxy_IIR.set("user_name_01", "小傅哥"); + String val02 = proxy_IIR.get("user_name_01"); + System.out.println("测试结果:" + val02); + + } + +} diff --git a/pom.xml b/pom.xml new file mode 100755 index 0000000000000000000000000000000000000000..8dda9d0362225efd8c97e61db66da5effc93e921 --- /dev/null +++ b/pom.xml @@ -0,0 +1,57 @@ + + + 4.0.0 + + org.itstack + itstack-demo-design + pom + 1.0-SNAPSHOT + + itstack-demo-design-1-01 + itstack-demo-design-1-00 + itstack-demo-design-1-02 + itstack-demo-design-2-00 + itstack-demo-design-2-01 + itstack-demo-design-2-02 + + + + + + com.alibaba + fastjson + 1.2.68 + + + junit + junit + 4.12 + test + + + + org.slf4j + slf4j-api + 1.7.5 + + + org.slf4j + jcl-over-slf4j + 1.7.5 + + + ch.qos.logback + logback-classic + 1.0.9 + + + slf4j-api + org.slf4j + + + + + + \ No newline at end of file