当前位置: 首页 > news >正文

西安门户网站建设公司哪家好安徽省建设厅网站个人怎么注册

西安门户网站建设公司哪家好,安徽省建设厅网站个人怎么注册,网站经营方案,奉化商用关键词优化简介 本章节通过手写一个简单的 Spring 框架来加深对 Spring 框架源码以及设计思想的理解#xff1b; 实现步骤 BeanScope 枚举代码 public enum BeanScope { sigleton, prototype; }AppConfig 配置类 // 定义包扫描路径 ComponentScan(com.dufu.spring 实现步骤 BeanScope 枚举代码 public enum BeanScope { sigleton, prototype; }AppConfig 配置类 // 定义包扫描路径 ComponentScan(com.dufu.spring) public class AppConfig {}DufuBeanPostProcessor 后置处理器 Component public class DufuBeanPostProcessor implements BeanPostProcessor {Overridepublic Object postProcessorBeforeInitialization(String beanName, Object bean) {if (beanName.equals(userService)) {System.out.println(处理 userService 初始化之前 ...);}return bean;}Overridepublic Object postProcessorAfterInitialization(String beanName, Object bean) {if (beanName.equals(userService)) {System.out.println(处理 userService 初始化之后 ...);// 创建代理对象模拟 AOP 功能Object proxyInstance Proxy.newProxyInstance(DufuBeanPostProcessor.class.getClassLoader(),bean.getClass().getInterfaces(), new InvocationHandler() {Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println(AOP 切面逻辑 ...);return method.invoke(bean, args);}});return proxyInstance;}return bean;}UserService 接口代码 public interface IUserService { void test(); }OrderService 实例 Component public class OrderService {}UserService 实例 Component public class UserService implements BeanNameAware, InitializingBean, IUserService {Autowiredprivate OrderService orderService;public void print() {System.out.println(orderService);}Overridepublic void setBeanName(String beanName) {System.out.println(beanName beanName);}Overridepublic void afterPropertiesSet() {System.out.println(UserService 初始化后其他操作 ...);}Overridepublic void test() {System.out.println(调用了 test() 方法);} }Autowired 注解 Retention(RetentionPolicy.RUNTIME) Target(ElementType.FIELD) public interface Autowired {String value() default ; } BeanDefinition Bean 的定义工具类 public class BeanDefinition {// Bean 的类型private Class type;// Bean 的范围(多例还是单例)private String scope;public Class getType() {return type;}public void setType(Class type) {this.type type;}public String getScope() {return scope;}public void setScope(String scope) {this.scope scope;} }BeanNameAware 回调接口 public interface BeanNameAware { void setBeanName(String beanName); }BeanPostProcessor 后置处理器接口 public interface BeanPostProcessor { // 初始化前 Object postProcessorBeforeInitialization(String beanName, Object bean); // 初始化后 Object postProcessorAfterInitialization(String beanName, Object bean); }Component 注解 Retention(RetentionPolicy.RUNTIME) Target(ElementType.TYPE) public interface Component {String value() default ; }ComponentScan 注解 Retention(RetentionPolicy.RUNTIME) Target(ElementType.TYPE) public interface ComponentScan {String value() default ; }DufuApplicationContext Spring 容器核心设计 public class DufuApplicationContext {// 点符号private final String SYMBOL_SPOT .;// 左斜线private final String LEFT_SLASH /;// 右斜线private final String RIGHT_SLASH \\;// .class 后缀private final String SUFFIX_CLASS .class;// 配置类private Class configClass;// Bean 信息集合private ConcurrentHashMap String, BeanDefinition beanDefinitionMap new ConcurrentHashMap ();// Bean 单例池private ConcurrentHashMap String, Object singletonObjects new ConcurrentHashMap ();// 后置处理器集合private List BeanPostProcessor beanPostProcessorList new ArrayList ();public DufuApplicationContext() {}public DufuApplicationContext(Class configClass) throws Exception {this.configClass configClass;// 判断有没有 ComponentScan 注解, 并获取扫描路径解析 Bean 对象信息if (configClass.isAnnotationPresent(ComponentScan.class)) {ComponentScan componentScanAnnotation (ComponentScan) configClass.getAnnotation(ComponentScan.class);String pkScanValue componentScanAnnotation.value().equals() ? configClass.getPackage().getName() : componentScanAnnotation.value();// 注意: 我们实际上需要的是 out 目录下的路径String packagePath pkScanValue.replace(SYMBOL_SPOT, LEFT_SLASH);ClassLoader classLoader DufuApplicationContext.class.getClassLoader();URL resource classLoader.getResource(packagePath);// 得到本地项目的绝对路径// D:\sorftware\idea\workspace\workspace_11\spring-dufu\out\production\spring-dufu\com\dufu\serviceFile outDirectory new File(resource.getFile());if (outDirectory.isDirectory()) {// 拿到所有编译后的 class 文件File[] files outDirectory.listFiles();for (File file: files) {String filePath file.getAbsolutePath();if (filePath.endsWith(SUFFIX_CLASS)) {String className filePath.substring(filePath.lastIndexOf(RIGHT_SLASH) 1, filePath.lastIndexOf(SUFFIX_CLASS));Class ? clazz classLoader.loadClass(pkScanValue SYMBOL_SPOT className);// 记录后置处理器if (BeanPostProcessor.class.isAssignableFrom(clazz)) {BeanPostProcessor instance (BeanPostProcessor) clazz.newInstance();beanPostProcessorList.add(instance);}// 声明为 Bean 的实体类if (clazz.isAnnotationPresent(Component.class)) {Component componentAnnotation clazz.getAnnotation(Component.class);// 获取 BeanNameString beanName componentAnnotation.value().equals() ? Introspector.decapitalize(clazz.getSimpleName()) : componentAnnotation.value();// 定义 BeanBeanDefinition beanDefinition new BeanDefinition();// 定义 Bean 的类型beanDefinition.setType(clazz);// 定义 Bean 的范围if (clazz.isAnnotationPresent(Scope.class)) {Scope scopeAnnotation clazz.getAnnotation(Scope.class);beanDefinition.setScope(scopeAnnotation.value());} else { // 单例 BeanbeanDefinition.setScope(BeanScope.sigleton.toString());}// 将定义后的 Bean 存入到单例池beanDefinitionMap.put(beanName, beanDefinition);}}}}}// 实例化单例 Beanfor (String beanName: beanDefinitionMap.keySet()) {BeanDefinition beanDefinition beanDefinitionMap.get(beanName);if (beanDefinition.getScope().equals(BeanScope.sigleton.toString())) {Object bean createBean(beanName, beanDefinition);singletonObjects.put(beanName, bean);}}}/*** 创建 Bean 对象*/private Object createBean(String beanName, BeanDefinition beanDefinition) throws Exception {Class clazz beanDefinition.getType();// 利用初始化方法实例化对象Object instance clazz.getConstructor().newInstance();// 依赖注入for (Field field: clazz.getDeclaredFields()) {// 如果属性上添加了 Autowired 注解就注入if (field.isAnnotationPresent(Autowired.class)) {field.setAccessible(true);field.set(instance, getBean(field.getName()));}}// 如果实现了 BeanNameAware 接口, 回调方法if (instance instanceof BeanNameAware) {((BeanNameAware) instance).setBeanName(beanName);}// 后置处理器, 初始化前for (BeanPostProcessor beanPostProcessor: beanPostProcessorList) {instance beanPostProcessor.postProcessorBeforeInitialization(beanName, instance);}// 初始化if (instance instanceof InitializingBean) {((InitializingBean) instance).afterPropertiesSet();}// BeanPostProcessor(Bean 的后置处理器) 初始化后 AOP// 后置处理器, 初始化后for (BeanPostProcessor beanPostProcessor: beanPostProcessorList) {instance beanPostProcessor.postProcessorAfterInitialization(beanName, instance);}return instance;}/*** 根据名称获取 Bean*/public Object getBean(String beanName) throws Exception {BeanDefinition beanDefinition beanDefinitionMap.get(beanName);if (null beanDefinition) {throw new NullPointerException(名为: beanName 的 Bean 不存在);}String scope beanDefinition.getScope();if (scope.equals(BeanScope.sigleton.toString())) { // 单例 BeanObject bean singletonObjects.get(beanName);if (null bean) {singletonObjects.put(beanName, createBean(beanName, beanDefinition));}return bean;} else { // 多例 Beanreturn createBean(beanName, beanDefinition);}} }InitializingBean 初始化 Bean 接口 public interface InitializingBean { void afterPropertiesSet(); }Scope 注解 Retention(RetentionPolicy.RUNTIME) Target(ElementType.TYPE) public interface Scope { String value() default ; }测试一下 public class Test {public static void main(String[] args) throws Exception {DufuApplicationContext context new DufuApplicationContext(AppConfig.class);// 模拟依赖注入Aware 回调初始化//UserService userService (UserService)context.getBean(userService);//System.out.println(userService);//userService.print();// 模拟 AOP 功能调用前需要先注释掉上面的代码IUserService iUserService (IUserService) context.getBean(userService);iUserService.test();} }
http://www.hkea.cn/news/14337160/

相关文章:

  • 无锡住房和城乡建设局网站黑马程序员大学叫什么
  • 汕头网页设计网站方案广州越秀区酒店推荐
  • 网站500错误 虚拟主机全球域名最贵的100个域名
  • 怎么用cms做网站临时网页生成
  • 济宁万达网站建设网页在线发短信平台
  • 湖南建设厅网站二建注销qq是用什么软件开发的
  • asp自助建站系统宝安营销型网站设计
  • 外贸免费平台东莞seo关键词排名优化排名
  • 北京网站关键词优化wordpress登陆注册插件
  • 漳州市住房与城乡建设部网站桂林人论坛
  • 建设网站的公司哪家好小型企业管理系统软件
  • 企业网站建设网页南宁做网站的公司有哪些
  • 中文简洁网站设计图心理网站建设策划书
  • 南京建设人才网站弹窗视频网站
  • 重庆网站建设报价济南正规网站建设公司
  • 手机在线做网站wordpress数据库4.1.14
  • 自己做网站的过程网站建设的网络公司
  • 汕尾旅游攻略app跳转网站银川专业做网站
  • 做废品交易看什么什么网站linux打包网站做备份
  • 网站做网页教育类手机网站模板下载
  • 网站开发公司vue框架网站建设征集意见
  • 大连地区建设网站大地seo
  • 网站建设合同简单嘉兴网站快照优化公司
  • 山东建设厅网站石家庄企业网站建设价格
  • 网站建设英文字体格式郑州短视频拍摄制作
  • 网站如何做谷歌优化网站一般用什么数据库
  • 网站建设设计主要系统wordpress 黄蓝 现代企业
  • 安阳做网站电话呼和浩特网站建设公司
  • 免建网站led网站建设方案模板
  • 帝国cms做英文网站上海网站设计案例