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

做网站买空间用共享ip实训课网站开发个人小结

做网站买空间用共享ip,实训课网站开发个人小结,青岛机关建设网站,个股期权系统网站开发SpringBoot 自动装配 SpringBoot 自动装配原理详细介绍自定义 Spring Boot Starter1.读取配置文件2.注册 AlipayClient bean3.核心代码编写4.注册 AlipayAPI bean5.编写 META-INF/spring.factories 文件6.项目结构测试1.创建一个测试项目#xff0c;引入自定义 starter 依赖2.… SpringBoot 自动装配 SpringBoot 自动装配原理详细介绍自定义 Spring Boot Starter1.读取配置文件2.注册 AlipayClient bean3.核心代码编写4.注册 AlipayAPI bean5.编写 META-INF/spring.factories 文件6.项目结构测试1.创建一个测试项目引入自定义 starter 依赖2.配置文件编写3.编写测试代码 SpringBoot 自动装配原理 Spring Boot的自动装配是通过EnableAutoConfiguration注解来实现的该注解包含了一系列的自动装配配置类这些配置类会根据项目的依赖和配置自动地配置应用程序上下文中的Bean。 SpringBoot 应用的启动类上都有一个 SpringBootApplication 注解该注解包含 EnableAutoConfiguration注解。 EnableAutoConfiguration注解包含两个重要注解 AutoConfigurationPackage 该注解是用于标记主配置类通常是Spring Boot应用程序的入口类以指示在进行自动配置时应该扫描的基本包。它会将该类所在的包及其子包纳入自动配置的扫描范围。 Import({AutoConfigurationImportSelector.class}) 该注解用于导入一个配置选择器即AutoConfigurationImportSelector类。AutoConfigurationImportSelector是Spring Boot自动配置的核心它负责从类路径下的META-INF/spring.factories文件中加载自动配置类的候选列表并根据条件选择合适的自动配置类导入到Spring容器中。通过Import注解将AutoConfigurationImportSelector引入到主配置类中以启用自动配置的机制。 装配流程如下 主配置类上的EnableAutoConfiguration触发自动配置的启用。EnableAutoConfiguration包含AutoConfigurationPackage和Import({AutoConfigurationImportSelector.class})。AutoConfigurationPackage标记了要扫描的基本包。Import({AutoConfigurationImportSelector.class})导入了AutoConfigurationImportSelector启动自动配置的核心。AutoConfigurationImportSelector根据条件加载META-INF/spring.factories文件中的自动配置类候选列表。过滤掉不符合条件的自动配置类移除重复的自动配置类获取需要排除的自动配置类。最终将符合条件的自动配置类导入到Spring容器中。 详细介绍 AutoConfigurationImportSelector 实现了 DeferredImportSelector接口用于延迟导入配置类的选择器。它允许在运行时决定要导入的配置类。通常它用于实现一些自定义逻辑以便根据运行时条件来选择性地导入配置。 DeferredImportSelector 定义了一个方法 String[] selectImports(AnnotationMetadata importingClassMetadata);AutoConfigurationImportSelector 对这个方法的实现 public String[] selectImports(AnnotationMetadata annotationMetadata) {// isEnabled(annotationMetadata) 用于判断是否启用了自动配置if (!this.isEnabled(annotationMetadata)) {return NO_IMPORTS;} else {// * getAutoConfigurationEntry(annotationMetadata) 获取自动配置的条目其中包含了要导入的配置类的信息。AutoConfigurationEntry autoConfigurationEntry this.getAutoConfigurationEntry(annotationMetadata);return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());}}getAutoConfigurationEntry() protected AutoConfigurationEntry getAutoConfigurationEntry(AnnotationMetadata annotationMetadata) {if (!this.isEnabled(annotationMetadata)) {return EMPTY_ENTRY;} else {AnnotationAttributes attributes this.getAttributes(annotationMetadata);// * 获取候选的自动配置类的全限定类名列表ListString configurations this.getCandidateConfigurations(annotationMetadata, attributes);// 移除重复的自动配置类configurations this.removeDuplicates(configurations);// 获取需要排除的自动配置类的全限定类名列表SetString exclusions this.getExclusions(annotationMetadata, attributes);// 检查是否有重复排除的自动配置类如果有则抛出异常this.checkExcludedClasses(configurations, exclusions);// 移除需要排除的自动配置类configurations.removeAll(exclusions);// 获取配置类的过滤器并过滤掉不符合条件的自动配置类configurations this.getConfigurationClassFilter().filter(configurations);// 触发自动配置导入事件this.fireAutoConfigurationImportEvents(configurations, exclusions);// 返回一个AutoConfigurationEntry对象包含了最终要导入的自动配置类的信息。return new AutoConfigurationEntry(configurations, exclusions);}}getCandidateConfigurations() 获取候选配置 protected ListString getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {/*使用SpringFactoriesLoader加载META-INF/spring.factories文件中的配置。this.getSpringFactoriesLoaderFactoryClass()返回工厂类的类名通常是org.springframework.boot.autoconfigure.EnableAutoConfiguration。这里加载的是自动配置的候选类的全限定类名。相当于根据 key 获取 value*/ListString configurations new ArrayList(SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader()));ImportCandidates.load(AutoConfiguration.class, this.getBeanClassLoader()).forEach(configurations::add);// 使用Assert来确保最终得到的自动配置类列表不为空如果为空则抛出异常。Assert.notEmpty(configurations, No auto configuration classes found in META-INF/spring.factories nor in META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. If you are using a custom packaging, make sure that file is correct.);return configurations;}loadFactoryNames() : public static ListString loadFactoryNames(Class? factoryType, Nullable ClassLoader classLoader) {ClassLoader classLoaderToUse classLoader;if (classLoader null) {classLoaderToUse SpringFactoriesLoader.class.getClassLoader();}String factoryTypeName factoryType.getName();// * 调用loadSpringFactories方法加载META-INF/spring.factories文件中的配置。return (List)loadSpringFactories(classLoaderToUse).getOrDefault(factoryTypeName, Collections.emptyList()); } 查看 Spring Boot 自动装配源码可以看到上面的代码就是加载 META-INF/spring.factories 中键org.springframework.boot.autoconfigure.EnableAutoConfiguration 的值 自定义 Spring Boot Starter 以支付宝沙箱支付为例 新建一个项目启动类和配置文件都删掉创建META-INF/spring.factories。 1.读取配置文件 Data ConfigurationProperties(prefix alipay) public class PayProperties {private String appId;private String appPrivateKey;private String alipayPublicKey;private String notifyUrl;private String gateway; }2.注册 AlipayClient bean Configuration EnableConfigurationProperties(PayProperties.class) public class AutoConfiguration {Beanpublic AlipayClient getAlipayClient(PayProperties payProperties){AlipayClient alipayClient new DefaultAlipayClient(payProperties.getGateway(),payProperties.getAppId(),payProperties.getAppPrivateKey(),AlipayConstants.FORMAT_JSON,AlipayConstants.CHARSET_UTF8,payProperties.getAlipayPublicKey(),AlipayConstants.SIGN_TYPE_RSA2);return alipayClient;} }3.核心代码编写 AlipayAPI AllArgsConstructor // 生成全部参数的构造函数 public class AlipayAPI {private String notifyUrl;private AlipayClient alipayClient;public String pay(Order order){AlipayTradePagePayRequest request new AlipayTradePagePayRequest();// 支付宝页面跳转地址request.setReturnUrl(notifyUrl);// 异步通知的地址request.setNotifyUrl(notifyUrl);MapString,String map new HashMap();map.put(out_trade_no,order.getOrderId());map.put(total_amount,order.getPrice());map.put(subject,order.getSubject());map.put(body,order.getBody());map.put(product_code,FAST_INSTANT_TRADE_PAY);// 设置业务参数request.setBizContent(JSONObject.toJSONString(map));// 发起支付请求// 发起支付请求AlipayTradePagePayResponse response null;try {response alipayClient.pageExecute(request);} catch (AlipayApiException e) {throw new RuntimeException(e);}// 获取响应结果if (response.isSuccess()) {System.out.println(调用成功);System.out.println(支付宝支付链接 response.getBody());return response.getBody();} else {System.out.println(调用失败);System.out.println(错误信息 response.getMsg());return 支付失败;}} }Order Data public class Order {// 订单idprivate String orderId;// 价格private String price;// 商品名称private String subject;// 商品描述private String body;// 支付场景/*** FAST_INSTANT_TRADE_PAY即时到账适用于即时交易场景买家付款后卖家立即收到款项。* QUICK_MSECURITY_PAY手机网页支付适用于手机网页支付场景。* FACE_TO_FACE_PAYMENT当面付适用于线下面对面付款场景比如扫码支付。* APP支付APP支付场景适用于在APP内的支付场景。* WAP支付手机网站支付场景适用于手机网站支付场景。* PRE_AUTH预授权适用于预先授权场景买家授权预先冻结资金商家在完成业务后调用支付宝解冻资金*/private String code; }4.注册 AlipayAPI bean Configuration EnableConfigurationProperties(PayProperties.class) public class AutoConfiguration {Beanpublic AlipayClient getAlipayClient(PayProperties payProperties){AlipayClient alipayClient new DefaultAlipayClient(payProperties.getGateway(),payProperties.getAppId(),payProperties.getAppPrivateKey(),AlipayConstants.FORMAT_JSON,AlipayConstants.CHARSET_UTF8,payProperties.getAlipayPublicKey(),AlipayConstants.SIGN_TYPE_RSA2);return alipayClient;}Beanpublic AlipayAPI getAlipayApi(PayProperties payProperties,AlipayClient alipayClient){return new AlipayAPI(payProperties.getNotifyUrl(),alipayClient);} }5.编写 META-INF/spring.factories 文件 Spring Boot 自动装配会加载这个config.AutoConfiguration 类在这个类中注册的bean也会注入到 Spring 容器中 org.springframework.boot.autoconfigure.EnableAutoConfiguration\com.hzy.alipaystarter.config.AutoConfiguration6.项目结构 config- AutoConfiguration 自动装配配置类- PayProperties 配置文件读取类 core - api- AlipayAPI - dtos- Order 测试 1.创建一个测试项目引入自定义 starter 依赖 dependencygroupIdcom.hzy/groupIdartifactIdalipay-starter/artifactIdversion0.0.1-SNAPSHOT/version/dependency2.配置文件编写 alipay:appId: appPrivateKey: alipayPublicKey: notifyUrl: gateway: https://openapi-sandbox.dl.alipaydev.com/gateway.do3.编写测试代码 SpringBootTest class TestApplicationTests {Autowiredprivate AlipayAPI alipayAPI;Testvoid pay(){Order order new Order();order.setOrderId(String.valueOf(System.currentTimeMillis()));order.setSubject(xiaomi 12);order.setPrice(456.89);order.setBody(8 256);order.setCode(FAST_INSTANT_TRADE_PAY);// 一行代码实现支付宝支付String pay alipayAPI.pay(order);System.out.println(pay);} }
http://www.yutouwan.com/news/501789/

相关文章:

  • 工业皮带怎么做免费的网站社交做的最好的网站
  • 网站怎么制作做正能量网站入口不用下载免费
  • 网站制作项目杜集网站建设
  • 四川交投建设工程股份有限公司网站英文字体设计网站
  • 海原网站建设网站建设经济效益
  • flash个人网站设计高端企业网站建设核心
  • 网站上传的图片怎么做的清晰度有关网站建设的图片
  • 怎么把自己的网站上传到百度wordpress模板选择
  • 河北企业网站设计网站策划书中应包括市场竞争对手的信息
  • 佛山网站制作哪个好薇网页制作实战视频
  • 房子如何上网站做民宿做库房推广哪个网站好
  • 用网站建设与管理创业疾控中心24小时咨询电话
  • 苏州网站制作及推广做水处理药剂的公司网站
  • 网站快速备案濮阳seo外包公司
  • 网站搜索引擎优化主要方法下载建设网站
  • 那曲地区建设局网站软件源码成品资源下载网站
  • 猎头自己在哪个网站做单网站建设英文字体
  • 首席经济学家共议资产前景 慢牛逻辑逐步形成
  • 死了么APP称承受巨大压力 创新路上的坚守与挑战
  • 贵金属“狂飙” 这些骗局要警惕 理性投资防风险
  • 趴地菠菜黄心菜 河南本土蔬菜破圈 互联网助力鲜蔬走红
  • 德国遭遇“黑冰”天气 交通严重受阻
  • 女子轻信“办户口”谎言被骗近18万 骗子已被批捕
  • 俄称“榛树”导弹打瘫乌战机修理厂 重创维修与生产设施
  • 郑州制作网站费用公司网站规划案例
  • 安阳网站建设公司出租车公司深圳网络推广公司哪家好
  • 义乌北苑编程网站开发公司html电影网页制作模板
  • 黑龙江省营商环境建设监督局网站注册公司取名技巧
  • 使用爬虫做的网站电脑做apk的网站h5
  • 怎么做有个捐款的网站深圳网站平台