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

国外建站推广建立网站的步骤和费用

国外建站推广,建立网站的步骤和费用,坑梓网站建设哪家好,常州云计算网站建设引言 determineCandidateConstructors——spring创建实例无法避免的一个方法&#xff0c;大家一起学习&#xff0c;让我们对spring创建bean的过程更加深刻 代码 Nullablepublic Constructor<?>[] determineCandidateConstructors(Class<?> beanClass, final Str…

引言

        determineCandidateConstructors——spring创建实例无法避免的一个方法,大家一起学习,让我们对spring创建bean的过程更加深刻

代码

    @Nullablepublic Constructor<?>[] determineCandidateConstructors(Class<?> beanClass, final String beanName) throws BeanCreationException {
//在开始处理构造函数之前,先检查beanClass中是否存在@Lookup注解的方法。如果有,可能会影响构造函数的选择。this.checkLookupMethods(beanClass, beanName);
//首先尝试从缓存candidateConstructorsCache中获取该beanClass的候选构造函数。
//如果缓存中不存在,则进入同步块进一步处理。Constructor<?>[] candidateConstructors = (Constructor[])this.candidateConstructorsCache.get(beanClass);if (candidateConstructors == null) {
//使用同步块确保线程安全,避免多个线程同时处理同一个beanClass的构造函数。synchronized(this.candidateConstructorsCache) {candidateConstructors = (Constructor[])this.candidateConstructorsCache.get(beanClass);if (candidateConstructors == null) {Constructor<?>[] rawCandidates;try {
//通过反射获取beanClass中所有声明的构造函数rawCandidates = beanClass.getDeclaredConstructors();} catch (Throwable ex) {throw new BeanCreationException(beanName, "Resolution of declared constructors on bean Class [" + beanClass.getName() + "] from ClassLoader [" + String.valueOf(beanClass.getClassLoader()) + "] failed", ex);}
/**
初始化变量:
candidates: 存储候选构造函数的列表。
requiredConstructor: 标记带有@Autowired(required=true)注解的构造函数。
defaultConstructor: 标记无参构造函数。
primaryConstructor: 通过BeanUtils.findPrimaryConstructor找到的主构造函数。
nonSyntheticConstructors: 统计非合成构造函数的数量。**/List<Constructor<?>> candidates = new ArrayList(rawCandidates.length);Constructor<?> requiredConstructor = null;Constructor<?> defaultConstructor = null;Constructor<?> primaryConstructor = BeanUtils.findPrimaryConstructor(beanClass);int nonSyntheticConstructors = 0;/**
过滤合成构造函数: 合成构造函数(如内部类的构造函数)通常不需要处理。
查找@Autowired注解: 通过findAutowiredAnnotation方法检查构造函数是否带有@Autowired注解。
处理无参构造函数: 如果构造函数没有参数,则标记为defaultConstructor。**/for(Constructor<?> candidate : rawCandidates) {if (!candidate.isSynthetic()) {++nonSyntheticConstructors;} else if (primaryConstructor != null) {continue;}MergedAnnotation<?> ann = this.findAutowiredAnnotation(candidate);if (ann == null) {Class<?> userClass = ClassUtils.getUserClass(beanClass);if (userClass != beanClass) {try {Constructor<?> superCtor = userClass.getDeclaredConstructor(candidate.getParameterTypes());ann = this.findAutowiredAnnotation(superCtor);} catch (NoSuchMethodException var19) {}}}if (ann != null) {if (requiredConstructor != null) {String var23 = String.valueOf(candidate);throw new BeanCreationException(beanName, "Invalid autowire-marked constructor: " + var23 + ". Found constructor with 'required' Autowired annotation already: " + String.valueOf(requiredConstructor));}boolean required = this.determineRequiredStatus(ann);if (required) {if (!candidates.isEmpty()) {String var10003 = String.valueOf(candidates);throw new BeanCreationException(beanName, "Invalid autowire-marked constructors: " + var10003 + ". Found constructor with 'required' Autowired annotation: " + String.valueOf(candidate));}requiredConstructor = candidate;}candidates.add(candidate);} else if (candidate.getParameterCount() == 0) {defaultConstructor = candidate;}}/**优先选择带有@Autowired注解的构造函数。
如果没有合适的构造函数,则根据以下规则选择:
如果只有一个构造函数且带参数,则选择该构造函数。
如果有两个非合成构造函数(主构造函数和无参构造函数),则选择它们。
如果只有一个非合成构造函数(主构造函数),则选择它。
否则,返回空数组。**/if (!candidates.isEmpty()) {if (requiredConstructor == null) {if (defaultConstructor != null) {candidates.add(defaultConstructor);} else if (candidates.size() == 1 && this.logger.isInfoEnabled()) {this.logger.info("Inconsistent constructor declaration on bean with name '" + beanName + "': single autowire-marked constructor flagged as optional - this constructor is effectively required since there is no default constructor to fall back to: " + String.valueOf(candidates.get(0)));}}candidateConstructors = (Constructor[])candidates.toArray(EMPTY_CONSTRUCTOR_ARRAY);} else if (rawCandidates.length == 1 && rawCandidates[0].getParameterCount() > 0) {candidateConstructors = new Constructor[]{rawCandidates[0]};} else if (nonSyntheticConstructors == 2 && primaryConstructor != null && defaultConstructor != null && !primaryConstructor.equals(defaultConstructor)) {candidateConstructors = new Constructor[]{primaryConstructor, defaultConstructor};} else if (nonSyntheticConstructors == 1 && primaryConstructor != null) {candidateConstructors = new Constructor[]{primaryConstructor};} else {candidateConstructors = EMPTY_CONSTRUCTOR_ARRAY;}
//将最终确定的候选构造函数存入缓存,避免重复计算。this.candidateConstructorsCache.put(beanClass, candidateConstructors);}}}return candidateConstructors.length > 0 ? candidateConstructors : null;}

 讲解

        总的来说就是根据你创建的bean,判断是否为有参构造,是否为无参构造,是否通过Autowired进行了注解,这是我的理解,大佬们也可以多多补充一下,因为这也是我在背八股文时一直背不到这个才请教大佬,大佬叫我看源码我理解的

但是还是不怎么理解,只是把这个方法能够理解表层了


文章转载自:

http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://00000000.bsbcp.cn
http://www.dtcms.com/wzjs/613297.html

相关文章:

  • 优化百度网站什么网站是html5做的
  • 国内vps做网站备案偃师制作网站
  • 东莞哪家做网站很有名的公司搜索引擎网络推广公司上海
  • 王也的配音员是谁优化技术基础
  • 网站不能访问的原因阜新全网营销网站建设
  • 公共部门网站建设维护寿光网站建设推广
  • seo关于网站搜索排名网站建设 聊城
  • 深圳网站建设网络推广公司网站开发的实训报告
  • 网站关键词设置汉中建设工程招标新闻中心
  • 广州网站建站公司菜篮网网站开发技术
  • 河北云网站建设页面设计好吗
  • 哪里可以做公司网站备案中国购物平台排名
  • html5网站源码下载免费制作小说封面的网站
  • 微信 网站 收费标准免费网站空间和域名
  • 网站链接锚点怎么做息壤空间怎么上传网站
  • 网站建设 服务内容东营有做网站的公司
  • 深圳住房建设局官方网站展馆展示设计公司哪家好一点
  • 创建网站首页时通常取文件名为南通网络公司网站
  • 怎么做二手网站代理哪里可做网站
  • 网站建设公司做ppt吗局域网里建设网站
  • 网站多久备案一次h5常用的编辑平台
  • 制作网站如何赚钱crack wordpress
  • 做文学类网站后期花费汉南公司网站建设
  • 国家优质校建设网站外贸网站建设soho
  • 哪些网站做微课赚钱专业网站设计公司价格
  • 成都 网站建设 公司html在线编辑网站
  • seo站外推广业务外包注册公司最好用老年人
  • 网站虚拟交易技术怎么做网站建设 费用预算
  • 商业网站改版需要多久银川商城网站开发设计
  • 西安有哪些网站设计公司菜单设计制作网站