爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      Spring5参考指南: SpEL

      首页 知识中心 软件开发 文章详情页

      Spring5参考指南: SpEL

      2024-09-25 10:15:01 阅读次数:473

      Spring5

      SpEL的全称叫做Spring Expression Language。通常是为了在XML或者注解里面方便求值用的,通过编写#{ }这样的格式,即可使用。

      Bean定义中的使用

      ​XML配置​

      可以用SpEL设置属性或构造函数参数值,如下示例所示:

      <bean id="numberGuess" class="com.flydean.beans.NumberGuess"><property name="randomNumber" value="#{ T(java.lang.Math).random() * 100.0 }"/><!-- other properties --></bean>

      Spring内置了很多预定义变量,如SystemProperties, 你可以像下面这样直接引用它:

      <bean id="taxCalculator" class="com.flydean.beans.TaxCalculator"><property name="defaultLocale" value="#{ systemProperties['user.region'] }"/><!-- other properties --></bean>

      同样的,你还可以按名称引用其他bean属性,如下示例所示:

      <bean id="shapeGuess" class="com.flydean.beans.NumberGuess"><property name="randomNumber" value="#{ numberGuess.randomNumber }"/><!-- other properties --></bean>

      ​注解配置​

      要指定默认值,可以将@value注解放在字段、方法、方法或构造函数参数上。

      以下示例设置字段变量的默认值:

      public static class FieldValueTestBean@Value("#{ systemProperties['user.region'] }")private String defaultLocale;public void setDefaultLocale(String defaultLocale) {this.defaultLocale = defaultLocale;}public String getDefaultLocale() {return this.defaultLocale;}}

      下面的示例显示了在属性设置器方法上的示例:

      public static class PropertyValueTestBeanprivate String defaultLocale;@Value("#{ systemProperties['user.region'] }")public void setDefaultLocale(String defaultLocale) {this.defaultLocale = defaultLocale;}public String getDefaultLocale() {return this.defaultLocale;}}

      autowired方法和构造函数也可以使用@value注解,如下示例所示:

      public class SimpleMovieLister {private MovieFinder movieFinder;private String defaultLocale;@Autowiredpublic void configure(MovieFinder movieFinder,@Value("#{ systemProperties['user.region'] }") String defaultLocale) {this.movieFinder = movieFinder;this.defaultLocale = defaultLocale;}// ...}
      public class MovieRecommender {private String defaultLocale;private CustomerPreferenceDao customerPreferenceDao;@Autowiredpublic MovieRecommender(CustomerPreferenceDao customerPreferenceDao,@Value("#{systemProperties['user.country']}") String defaultLocale) {this.customerPreferenceDao = customerPreferenceDao;this.defaultLocale = defaultLocale;}// ...}

      求值

      虽然SpEL通常用在Spring的XML和注解中,但是它可以脱离Spring独立使用的,这时候需要自己去创建一些引导基础结构类,如解析器。 大多数Spring用户不需要处理这个基础结构,只需要编写表达式字符串进行求值。

      支持的功能

      SpELl支持很多种功能,包括:

      • 文字表达式
      • 属性、数组、列表、映射和索引器
      • 内联 List
      • 内联 Map
      • Array
      • 方法
      • Operators
      • 类型
      • Constructors
      • 变量
      • 功能
      • bean引用
      • 三元运算符(if-then-else)
      • elvis
      • Safe Navigation Operator

      下面分别举例子:

      ​文字表达式​

      支持的文本表达式类型包括字符串、数值(int、real、hex)、布尔值和null。字符串由单引号分隔。要将单引号本身放入字符串中,请使用两个单引号字符。

      public class LiteralApp {public static void main(String[] args) {ExpressionParser parser = new SpelExpressionParser();// eval(String) parser.parseExpression("'Hello World'").getValue();double avogadrosNumber = (Double) parser.parseExpression("6.0221415E+23").getValue();// eval(Integer) parser.parseExpression("0x7FFFFFFF").getValue();boolean trueValue = (Boolean) parser.parseExpression("true").getValue();Object nullValue = parser.parseExpression("null").getValue();}}

      ​Properties, Arrays, Lists, Maps, and Indexers​

      Properties 通过 “.” 来访问嵌套的属性值。如下:

      // eval(Integer) parser.parseExpression("Birthdate.Year + 1900").getValue(context);String city = (String) parser.parseExpression("placeOfBirth.City").getValue(context);

      属性名称的第一个字母允许不区分大小写。数组和列表的内容是使用方括号表示法获得的,如下例所示

      ExpressionParser parser = new SpelExpressionParser();EvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build();// Inventions Array// eval("inventions[3]").getValue(context, tesla, String.class);// Members List// eval("Members[0].Name").getValue(context, ieee, String.class);// List and Array navigation// eval("Members[0].Inventions[6]").getValue(context, ieee, String.class);

      映射的内容是通过在括号内指定文本键值获得的:

      // Officer's DictionaryInventor pupin = parser.parseExpression("Officers['president']").getValue(societyContext, Inventor.class);// eval("Officers['president'].PlaceOfBirth.City").getValue(societyContext, String.class);// setting valuesparser.parseExpression("Officers['advisors'][0].PlaceOfBirth.Country").setValue(societyContext, "Croatia");

      ​Inline List​

      你可以直接在表达式中表示列表:

      // eval(List) parser.parseExpression("{1,2,3,4}").getValue(context);List listOfLists = (List) parser.parseExpression("{{'a','b'},{'x','y'}}").getValue(context);

      ​Inline Map​

      你还可以使用key:value表示法在表达式中直接表示映射。以下示例显示了如何执行此操作:

      // eval(Map) parser.parseExpression("{name:'Nikola',dob:'10-July-1856'}").getValue(context);Map mapOfMaps = (Map) parser.parseExpression("{name:{first:'Nikola',last:'Tesla'},dob:{day:10,month:'July',year:1856}}").getValue(context);

      ​构造数组​

      可以使用熟悉的Java语法构建数组,可以选择的提供初始化器,以便在构建时填充数组。以下示例显示了如何执行此操作:

      int[] numbers1 = (int[]) parser.parseExpression("new int[4]").getValue(context);// Array with initializerint[] numbers2 = (int[]) parser.parseExpression("new int[]{1,2,3}").getValue(context);// Multi dimensional arrayint[][] numbers3 = (int[][]) parser.parseExpression("new int[4][5]").getValue(context);

      方法​

      可以通过使用典型的Java编程语法来调用方法。还可以对文本调用方法。还支持变量参数。以下示例演示如何调用方法:

      // string literal, eval("'abc'.substring(1, 3)").getValue(String.class);// eval("isMember('Mihajlo Pupin')").getValue(societyContext, Boolean.class);

      类型​

      您可以使用特殊的T运算符来指定java.lang.class(类型)的实例。静态方法也可以使用此运算符调用。StandardEvaluationContext使用TypeLocator来查找类型,StandardTypeLocator(可以替换)是在理解java.lang包的基础上构建的。这意味着T()对java.lang中类型的引用不需要完全限定,但所有其他类型引用都必须是限定的。下面的示例演示如何使用T运算符:

      Class dateClass = parser.parseExpression("T(java.util.Date)").getValue(Class.class);Class stringClass = parser.parseExpression("T(String)").getValue(Class.class);boolean trueValue = parser.parseExpression("T(java.math.RoundingMode).CEILING < T(java.math.RoundingMode).FLOOR").getValue(Boolean.class);

      构造器​

      可以使用new运算符调用构造函数。除了基元类型(int、float等)和字符串之外,其他类型都应该使用完全限定的类名。下面的示例演示如何使用新的运算符来调用构造函数:

      Inventor einstein = p.parseExpression("new org.spring.samples.spel.inventor.Inventor('Albert Einstein', 'German')").getValue(Inventor.class);//create new inventor instance within add method of Listp.parseExpression("Members.add(new org.spring.samples.spel.inventor.Inventor('Albert Einstein', 'German'))").getValue(societyContext);

      变量​

      可以使用#variableName语法引用表达式中的变量。变量是通过在EvaluationContext实现上使用setVariable方法设置的。以下示例显示如何使用变量:

      Inventor tesla = new Inventor("Nikola Tesla", "Serbian");EvaluationContext context = SimpleEvaluationContext.forReadWriteDataBinding().build();context.setVariable("newName", "Mike Tesla");parser.parseExpression("Name = #newName").getValue(context, tesla);System.out.println(tesla.getName())  // "Mike Tesla"

      ​#this和#root​

      #this始终是定义的,并引用当前的评估对象。#root变量总是被定义并引用根上下文对象。尽管#this可能会随着表达式的组件的计算而变化,但是#root始终引用根。以下示例说明如何使用#this和#root变量:

      // create an array of integersList<Integer> primes = new ArrayList<Integer>();primes.addAll(Arrays.asList(2,3,5,7,11,13,17));// create parser and set variable 'primes' as the array of integersExpressionParser parser = new SpelExpressionParser();EvaluationContext context = SimpleEvaluationContext.forReadOnlyDataAccess();context.setVariable("primes", primes);// all prime numbers > 10 from the list (using selection ?{...})// eval(List<Integer>) parser.parseExpression("#primes.?[#this>10]").getValue(context);

      函数

      您可以通过注册可以在表达式字符串中调用的用户定义函数来扩展spel。该函数通过EvaluationContext注册。以下示例显示如何注册用户定义函数:

      public abstract class StringUtils {public static String reverseString(String input) {StringBuilder backwards = new StringBuilder(input.length());for (int i = 0; i < input.length(); i++)backwards.append(input.charAt(input.length() - 1 - i));}return backwards.toString();}}
      ExpressionParser parser = new SpelExpressionParser();EvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build();context.setVariable("reverseString",StringUtils.class.getDeclaredMethod("reverseString", String.class));String helloWorldReversed = parser.parseExpression("#reverseString('hello')").getValue(context, String.class);

      Bean引用

      如果已使用bean resolver配置了评估上下文,则可以使用@符号从表达式中查找bean。以下示例显示了如何执行此操作:

      ExpressionParser parser = new SpelExpressionParser();StandardEvaluationContext context = new StandardEvaluationContext();context.setBeanResolver(new MyBeanResolver());// This will end up calling resolve(context,"something") on MyBeanResolver during eval("@something").getValue(context);

      要访问工厂bean本身,您应该在bean名称前面加上&符号。以下示例显示了如何执行此操作:

      ExpressionParser parser = new SpelExpressionParser();StandardEvaluationContext context = new StandardEvaluationContext();context.setBeanResolver(new MyBeanResolver());// This will end up calling resolve(context,"&foo") on MyBeanResolver during eval("&foo").getValue(context);

      If-Then-Else

      可以使用三元运算符在表达式中执行if-then-else条件逻辑。下面的列表显示了一个最小的示例:

      String falseString = parser.parseExpression("false ? 'trueExp' : 'falseExp'").getValue(String.class);

      Elvis

      ELVIS运算符是三元运算符语法的缩写,在groovy语言中使用。对于三元运算符语法,通常必须重复变量两次,如下示例所示:

      String name = "Elvis Presley";String displayName = (name != null ? name : "Unknown");

      相反,您可以使用Elvis操作符(以Elvis的发型命名)。下面的示例演示如何使用Elvis运算符:

      ExpressionParser parser = new SpelExpressionParser();String name = parser.parseExpression("name?:'Unknown'").getValue(String.class);System.out.println(name);  // 'Unknown'

      Safe Navigation 运算符

      Safe Navigation操作符用于避免nullpointerException,它来自groovy语言。通常,当您引用一个对象时,您可能需要在访问该对象的方法或属性之前验证它不是空的。为了避免这种情况,Safe Navigation操作符返回空值而不是抛出异常。以下示例说明如何使用Safe Navigation:

      ExpressionParser parser = new SpelExpressionParser();EvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build();Inventor tesla = new Inventor("Nikola Tesla", "Serbian");tesla.setPlaceOfBirth(new PlaceOfBirth("Smiljan"));String city = parser.parseExpression("PlaceOfBirth?.City").getValue(context, tesla, String.class);System.out.println(city);  // Smiljantesla.setPlaceOfBirth(null);city = parser.parseExpression("PlaceOfBirth?.City").getValue(context, tesla, String.class);System.out.println(city);  // null - does not throw NullPointerException!!!

      集合选择

      Selection是一种功能强大的表达式语言功能,通过从源集合的条目中进行选择,可以将源集合转换为另一个集合。

      Selection使用的语法为.?[selectionExpression]。它过滤集合并返回包含原始元素子集的新集合。例如,selection可以让我们很容易地获得塞尔维亚发明家的列表,如下示例所示:

      List<Inventor> list = (List<Inventor>) parser.parseExpression("Members.?[Nationality == 'Serbian']").getValue(societyContext);

      在list和map上都可以Selection。对于list,将根据每个单独的列表元素评估选择条件。针对map,选择标准针对每个映射条目(Java类型Map.Entry)进行评估。每个map项都有其键和值,可以作为属性访问,以便在选择中使用。

      以下表达式返回一个新map,该映射由原始map的那些元素组成,其中输入值小于27:

      Map newMap = parser.parseExpression("map.?[value<27]").getValue();

      除了返回所有选定的元素之外,您还能检索第一个或最后一个值。要获取与所选内容匹配的第一个条目,语法为。.^ [selectionExpression]。要获取最后一个匹配的选择,语法为.$[SelectionExpression]。

      集合投影

      Projection允许集合驱动子表达式的计算,结果是一个新集合。投影的语法是.![projectionExpression]。例如,假设我们有一个发明家列表,但是想要他们出生的城市列表。实际上,我们想为发明家列表中的每个条目评估“placeofbirth.city”。下面的示例使用投影进行此操作:

      // returns ['Smiljan', 'Idvor' ]List placesOfBirth = (List)parser.parseExpression("Members.![placeOfBirth.city]");

      您还可以使用map来驱动投影,在这种情况下,投影表达式针对map中的每个条目(表示为Java Map.Entry)进行评估。跨map投影的结果是一个列表,其中包含对每个map条目的投影表达式的计算。

      表达式模板化

      表达式模板允许将文本与一个或多个计算块混合。每个评估块都由您可以定义的前缀和后缀字符分隔。常见的选择是使用#{ }作为分隔符,如下示例所示:

      String randomPhrase = parser.parseExpression("random number is #{T(java.lang.Math).random()}",new TemplateParserContext()).getValue(String.class);// eval(232, 232, 232); max-width: 750px; color: rgb(38, 38, 38); margin: 0px; padding: 0px; background: rgb(249, 249, 249);">
      public class TemplateParserContext implements ParserContext {public String getExpressionPrefix() {return "#{";}public String getExpressionSuffix() {return "}";}public boolean isTemplate() {return true;}}
      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/flydean/2720074,作者:程序那些事,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:JavaScript高级之数据类型及其判断方法

      下一篇:创建你的第一个webdriver python代码

      相关文章

      2024-09-25 10:13:57

      Spring5参考指南:事件Event

      Spring提供了很方便的事件的处理机制,包括事件类ApplicationEvent和事件监听类ApplicationListener。 他实现的是设计者模式,如果实现了ApplicationListener接口的bean部署到Spring容器中,则每次ApplicationEvent发布到ApplicationContext时,都会通知该bean。

      2024-09-25 10:13:57
      Event , Spring5
      2024-09-25 10:13:34

      Spring5参考指南:AspectJ注解

      想要在Spring中使用AOP,和通用的Spring Bean一样有两种方式,一种就是注解,一种就是XML配置,本文主要讲解如何通过注解开启Spring AOP。

      2024-09-25 10:13:34
      Spring5
      2023-07-19 07:21:18

      Spring5参考指南:Bean的创建

      文章目录​​Spring容器中的Bean​​​​Bean的命名​​​​Bean的实例化​​Spring容器中的BeanBean在Spring中就是一个业务组件,我们通过创建各种Bean来完成最终的业务逻辑功能。在容器内部,每个bean的定义

      2023-07-19 07:21:18
      Bean , Spring5
      2023-06-28 09:05:25

      Spring5参考指南: BeanWrapper和PropertyEditor

      文章目录​​BeanWrapper​​​​PropertyEditor​​BeanWrapper通常来说一个Bean包含一个默认的无参构造函数,和属性的get,set方法。org.springframework.beans 包里面有个很重要

      2023-06-28 09:05:25
      Spring5
      2023-06-28 09:05:15

      Spring5参考指南:基于注解的容器配置

      文章目录​​@Required​​​​@Autowired​​​​@primary​​​​@Qualifier​​​​泛型​​​​@Resource​​​​@PostConstruct和@PreDestroy​​Spring的容器配置可以有

      2023-06-28 09:05:15
      Spring5 , 容器
      2023-03-29 09:39:09

      Spring5参考指南:SpringAOP简介

      文章目录AOP的概念Spring AOP简介Spring AOP通知类型 写过程序的都知道OOP即面向对象编程。从最开始的面向过程编程,到后面的面向对象编程,程序的编写方式发生了重大的变化,面向对象编程将业务逻辑封装成一个一个的对象,所有的

      2023-03-29 09:39:09
      Spring5
      2023-03-23 06:16:59

      Spring5参考指南:组件扫描

      文章目录​​组件扫描​​​​@Component​​​​元注解和组合注解​​​​组件内部定义Bean元数据​​​​为自动检测组件命名​​​​为自动检测的组件提供作用域​​​​生成候选组件的索引​​组件扫描上一篇文章我们讲到了annotati

      2023-03-23 06:16:59
      Spring5
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5255704

      查看更多

      最新文章

      Spring5参考指南:事件Event

      2024-09-25 10:13:57

      Spring5参考指南:AspectJ注解

      2024-09-25 10:13:34

      Spring5参考指南:Bean的创建

      2023-07-19 07:21:18

      Spring5参考指南: BeanWrapper和PropertyEditor

      2023-06-28 09:05:25

      Spring5参考指南:基于注解的容器配置

      2023-06-28 09:05:15

      Spring5参考指南:SpringAOP简介

      2023-03-29 09:39:09

      查看更多

      热门文章

      Spring5参考指南:事件Event

      2024-09-25 10:13:57

      Spring5参考指南:组件扫描

      2023-03-23 06:16:59

      Spring5参考指南:SpringAOP简介

      2023-03-29 09:39:09

      Spring5参考指南:AspectJ注解

      2024-09-25 10:13:34

      Spring5参考指南: BeanWrapper和PropertyEditor

      2023-06-28 09:05:25

      Spring5参考指南:Bean的创建

      2023-07-19 07:21:18

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      Spring5参考指南:事件Event

      Spring5参考指南:SpringAOP简介

      Spring5参考指南:AspectJ注解

      Spring5参考指南:组件扫描

      Spring5参考指南:基于注解的容器配置

      Spring5参考指南: BeanWrapper和PropertyEditor

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号