下载资源后端资源详情
summer.zip
大小:72.74KB
价格:10积分
下载量:0
评分:
5.0
上传者:cj151525
更新日期:2024-09-22

手写Spring框架源码

资源文件列表(大概)

文件名
大小
summer/
-
summer/.git/
-
summer/.git/HEAD
23B
summer/.git/config
130B
summer/.git/description
73B
summer/.git/hooks/
-
summer/.git/hooks/applypatch-msg.sample
478B
summer/.git/hooks/commit-msg.sample
896B
summer/.git/hooks/fsmonitor-watchman.sample
4.62KB
summer/.git/hooks/post-update.sample
189B
summer/.git/hooks/pre-applypatch.sample
424B
summer/.git/hooks/pre-commit.sample
1.6KB
summer/.git/hooks/pre-merge-commit.sample
416B
summer/.git/hooks/pre-push.sample
1.34KB
summer/.git/hooks/pre-rebase.sample
4.78KB
summer/.git/hooks/pre-receive.sample
544B
summer/.git/hooks/prepare-commit-msg.sample
1.46KB
summer/.git/hooks/push-to-checkout.sample
2.72KB
summer/.git/hooks/sendemail-validate.sample
2.25KB
summer/.git/hooks/update.sample
3.56KB
summer/.git/index
2.9KB
summer/.git/info/
-
summer/.git/info/exclude
240B
summer/.git/objects/
-
summer/.git/objects/03/
-
summer/.git/objects/03/96460e429caf32659d09563017833470f5e5c3
276B
summer/.git/objects/08/
-
summer/.git/objects/08/35525aac585904effeb379025707002710e381
258B
summer/.git/objects/13/
-
summer/.git/objects/13/2404bc29da2535f7f7dde84180d85abc60d5a4
303B
summer/.git/objects/13/566b81b018ad684f3a35fee301741b2734c8f4
141B
summer/.git/objects/2b/
-
summer/.git/objects/2b/63946d5b31084bbb7dda418ceb3d75eb686373
1.02KB
summer/.git/objects/2d/
-
summer/.git/objects/2d/98f0c2f7411cbe38cb7ea5cb88786ed80213b3
583B
summer/.git/objects/30/
-
summer/.git/objects/30/f47ddf5c498a549d307daa02562b7acd4fe7ba
333B
summer/.git/objects/32/
-
summer/.git/objects/32/7632c7fa66c6392487157393a5f58d06307f37
193B
summer/.git/objects/35/
-
summer/.git/objects/35/e6d06d72abf2c105666f9696de018ffdf0db38
281B
summer/.git/objects/3a/
-
summer/.git/objects/3a/eea94ed547bf089680d26b245f0871c8b99f69
242B
summer/.git/objects/3c/
-
summer/.git/objects/3c/02a49d0b997d4bdf0df753fc1e879eb387844a
234B
summer/.git/objects/42/
-
summer/.git/objects/42/2312da4af1465331644bfb9c9e251ccf838195
263B
summer/.git/objects/4d/
-
summer/.git/objects/4d/3a03b2c175f3f9b57c7134bd8829ce5feab4ae
261B
summer/.git/objects/59/
-
summer/.git/objects/59/67db551127860c6b4dd39ed7c2a58cf8ff033b
410B
summer/.git/objects/6b/
-
summer/.git/objects/6b/ab5e73d23a08e2eed8bd5bd056a350ac9359b8
216B
summer/.git/objects/71/
-
summer/.git/objects/71/2ab9d985c20018a0c97b93d2148ac1ffe588a5
300B
summer/.git/objects/73/
-
summer/.git/objects/73/2621e6cdca228debecd47e030e6d824e4eccf4
342B
summer/.git/objects/89/
-
summer/.git/objects/89/8ea3b6409bcc78d16be4c9cea283d5c429d2aa
206B
summer/.git/objects/90/
-
summer/.git/objects/90/f23a08a77b9f8b8c4b414bf830b18516be5b20
2.01KB
summer/.git/objects/94/
-
summer/.git/objects/94/a25f7f4cb416c083d265558da75d457237d671
155B
summer/.git/objects/94/ff652c729a68c45294fe4e2ebdf0dd7d7a7704
176B
summer/.git/objects/9a/
-
summer/.git/objects/9a/161ea3bf82d7c21ad98b38cb266082248ea0ae
214B
summer/.git/objects/9a/4ac8f7823350ecb6cc73fcb8d6f0c40395fad0
260B
summer/.git/objects/9a/ff25c06ebf5dd2b80d0544951e94bac3d4183a
170B
summer/.git/objects/a8/
-
summer/.git/objects/a8/fcc84db3668cadd75348be61bda65a8fc5ea21
800B
summer/.git/objects/aa/
-
summer/.git/objects/aa/00ffab7828f4818589659c804ec2cfd99baed3
170B
summer/.git/objects/bc/
-
summer/.git/objects/bc/c8ad448113f8c8bf401a52fea2bf58b36a3107
239B
summer/.git/objects/d7/
-
summer/.git/objects/d7/e995c756a458a5cae4ad685251f15c9a4e0918
1.25KB
summer/.git/objects/info/
-
summer/.git/objects/pack/
-
summer/.git/refs/
-
summer/.git/refs/heads/
-
summer/.git/refs/tags/
-
summer/.gitignore
400B
summer/.idea/
-
summer/.idea/.gitignore
184B
summer/.idea/compiler.xml
539B
summer/.idea/encodings.xml
267B
summer/.idea/jarRepositories.xml
864B
summer/.idea/markdown-navigator-enh.xml
2.12KB
summer/.idea/markdown-navigator.xml
3.81KB
summer/.idea/misc.xml
541B
summer/.idea/uiDesigner.xml
8.71KB
summer/.idea/vcs.xml
185B
summer/.idea/workspace.xml
7.66KB
summer/pom.xml
1.49KB
summer/src/
-
summer/src/main/
-
summer/src/main/java/
-
summer/src/main/java/org/
-
summer/src/main/java/org/cheney/
-
summer/src/main/java/org/cheney/SummerApplication.java
847B
summer/src/main/java/org/cheney/config/
-
summer/src/main/java/org/cheney/config/AppBeanPostProcessor.java
757B
summer/src/main/java/org/cheney/config/AppConfig.java
255B
summer/src/main/java/org/cheney/service/
-
summer/src/main/java/org/cheney/service/Admin.java
773B
summer/src/main/java/org/cheney/service/OrderService.java
301B
summer/src/main/java/org/cheney/service/User.java
313B
summer/src/main/java/org/cheney/service/UserService.java
392B
summer/src/main/java/org/cheney/summer/
-
summer/src/main/java/org/cheney/summer/BeanDefinition.java
643B
summer/src/main/java/org/cheney/summer/BeanNameAware.java
193B
summer/src/main/java/org/cheney/summer/BeanPostProcessor.java
318B
summer/src/main/java/org/cheney/summer/InitializingBean.java
195B
summer/src/main/java/org/cheney/summer/SummerApplicationContext.java
7.24KB
summer/src/main/java/org/cheney/summer/annotation/
-
summer/src/main/java/org/cheney/summer/annotation/Autowired.java
393B
summer/src/main/java/org/cheney/summer/annotation/Component.java
424B
summer/src/main/java/org/cheney/summer/annotation/ComponentScan.java
428B
summer/src/main/java/org/cheney/summer/annotation/Scope.java
420B
summer/src/test/
-
summer/src/test/java/
-
summer/src/test/java/org/
-
summer/src/test/java/org/cheney/
-
summer/src/test/java/org/cheney/MainTest.java
324B
summer/target/
-
summer/target/classes/
-
summer/target/classes/org/
-
summer/target/classes/org/cheney/
-
summer/target/classes/org/cheney/SummerApplication.class
1.05KB
summer/target/classes/org/cheney/config/
-
summer/target/classes/org/cheney/config/AppBeanPostProcessor.class
1.26KB
summer/target/classes/org/cheney/config/AppConfig.class
427B
summer/target/classes/org/cheney/service/
-
summer/target/classes/org/cheney/service/Admin.class
969B
summer/target/classes/org/cheney/service/OrderService.class
627B
summer/target/classes/org/cheney/service/User.class
438B
summer/target/classes/org/cheney/service/UserService.class
644B
summer/target/classes/org/cheney/summer/
-
summer/target/classes/org/cheney/summer/BeanDefinition.class
951B
summer/target/classes/org/cheney/summer/BeanNameAware.class
171B
summer/target/classes/org/cheney/summer/BeanPostProcessor.class
262B
summer/target/classes/org/cheney/summer/InitializingBean.class
166B
summer/target/classes/org/cheney/summer/SummerApplicationContext.class
7.08KB
summer/target/classes/org/cheney/summer/annotation/
-
summer/target/classes/org/cheney/summer/annotation/Autowired.class
399B
summer/target/classes/org/cheney/summer/annotation/Component.class
461B
summer/target/classes/org/cheney/summer/annotation/ComponentScan.class
469B
summer/target/classes/org/cheney/summer/annotation/Scope.class
453B
summer/target/generated-sources/
-
summer/target/generated-sources/annotations/
-

资源内容介绍

支持高质量中文博客,希望下载者一键三连,支持知识免费分享,你的支持是我的动力!
package org.cheney.summer;import org.cheney.summer.annotation.Autowired;import org.cheney.summer.annotation.Component;import org.cheney.summer.annotation.ComponentScan;import org.cheney.summer.annotation.Scope;import java.beans.Introspector;import java.io.File;import java.lang.annotation.Annotation;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.net.URL;import java.util.ArrayList;import java.util.concurrent.ConcurrentHashMap;/** * Hello world! */public class SummerApplicationContext { private Class configClass; private ConcurrentHashMap<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(); private ConcurrentHashMap<String, Object> singletonBeanMap = new ConcurrentHashMap<>(); private ArrayList<BeanPostProcessor> beanPostProcessorList = new ArrayList<>(); public SummerApplicationContext(Class configClass) { this.configClass = configClass; if (configClass.isAnnotationPresent(ComponentScan.class)) { ComponentScan scanAnnotation = (ComponentScan) configClass.getAnnotation(ComponentScan.class); String pathValue = scanAnnotation.value(); // org.cheney.service String[] paths = pathValue.split(","); for (String path : paths) { path = path.replace(".", "/"); ClassLoader classLoader = SummerApplicationContext.class.getClassLoader(); URL resource = classLoader.getResource(path); File file = new File(resource.getFile()); if (file.isDirectory()) { File[] files = file.listFiles(); for (File f : files) { String absolutePath = f.getAbsolutePath(); if (absolutePath.endsWith(".class")) { // 判断目录下的.class文件是否有 @Component注解 String className = absolutePath.substring(absolutePath.indexOf("org"), absolutePath.indexOf(".class")); className = className.replace("\\", ".");// System.out.println(className); try { Class<?> clazz = classLoader.loadClass(className); if (clazz.isAnnotationPresent(Component.class)) { // 扫描到了 @Component 注解,生成一个 BeanDefinition 对象 BeanDefinition beanDefinition = new BeanDefinition(); beanDefinition.setType(clazz); if (clazz.isAnnotationPresent(Scope.class)) { String value = clazz.getAnnotation(Scope.class).value(); beanDefinition.setScope(value); } else { beanDefinition.setScope("singleton"); } String beanName = clazz.getAnnotation(Component.class).value(); if ("".equals(beanName)) {// beanName = getBeanName(clazz); beanName = Introspector.decapitalize(clazz.getSimpleName()); } beanDefinitionMap.put(beanName, beanDefinition); // 前置 后置 处理器 if (BeanPostProcessor.class.isAssignableFrom(clazz)) { BeanPostProcessor instance = (BeanPostProcessor) clazz.newInstance(); beanPostProcessorList.add(instance); } } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { throw new RuntimeException(e); } catch (IllegalAccessException e) { throw new RuntimeException(e); } } } } } } // 将beanDefinition中的Singleton进行实例化 for (String beanName : beanDefinitionMap.keySet()) { BeanDefinition beanDefinition = beanDefinitionMap.get(beanName); if ("singleton".equals(beanDefinition.getScope())) { Object bean = createBean(beanName, beanDefinition); singletonBeanMap.put(beanName, bean); } } } private Object createBean(String beanName, BeanDefinition beanDefinition) { Class clazz = beanDefinition.getType(); try { Object bean = clazz.getConstructor().newInstance(); // 实现依赖注入 Field[] fields = clazz.getDeclaredFields(); for (Field f : fields) { if (f.isAnnotationPresent(Autowired.class)) { f.setAccessible(true); f.set(bean, getBean(f.getName())); } } // Aware 回调 if (bean instanceof BeanNameAware) { ((BeanNameAware) bean).setBeanName(beanName); } // BeanPostProcessor 初始化前,前置处理器 for (BeanPostProcessor processor : beanPostProcessorList) { processor.postProcessorBeforeInitialization(beanName,bean); } // 初始化 if (bean instanceof InitializingBean) { ((InitializingBean) bean).afterPropertiesSet(); } // BeanPostProcessor 初始化后,后置处理器 for (BeanPostProcessor processor : beanPostProcessorList) { processor.postProcessorAfterInitialization(beanName,bean); } return bean; } catch (InstantiationException e) { throw new RuntimeException(e); } catch (IllegalAccessException e) { throw new RuntimeException(e); } catch (InvocationTargetException e) { throw new RuntimeException(e); } catch (NoSuchMethodException e) { throw new RuntimeException(e); } } public Object getBean(String beanName) { BeanDefinition beanDefinition = beanDefinitionMap.get(beanName); if (null == beanDefinition) { throw new NullPointerException("Summer容器中不存在叫做" + beanName + "的Bean"); } if (beanDefinition.getScope().equals("singleton")) { Object bean = singletonBeanMap.get(beanName); if (null == bean) { bean = createBean(beanName, beanDefinition); singletonBeanMap.put(beanName, bean); } return bean; } else { return createBean(beanName, beanDefinition); } }}

用户评论 (0)

发表评论

captcha