day06-Spring管理Bean-IOC-04

Spring管理Bean-IOC-04

3.基于注解配置bean

3.1基本使用

3.1.1说明

基本说明:基于注解的方式配置bean,主要是项目开发中的组件,比如Controller,Service和Dao

组件的注解形式有:

  1. @Component 表示当前注解标识的是一个组件
  2. @Controller 表示当前注解标识的是一个控制器,通常用于Servlet
  3. @Service 表示当前注解标识的是一个处理业务逻辑的类,通常用于Service类
  4. @Repository 表示当前注解标识的是一个持久化层的类,通常用于Dao类

3.1.2快速入门

应用案例:使用注解的方式来配置Controller /Service/ Repository/ Component

代码实现:

1.使用注解方式,需要引入spring-aop.jar包,该jar包位于spring/lib下

2.创建 UserAction.java、UserService.java、UserDao.java、MyComponent.java

image-20230119165839094

UserDao:

package com.li.component;

import org.springframework.stereotype.Repository;

/**
 * @author 李
 * @version 1.0
 * 使用 @Repository 表示该类是一个Repository,一个持久化层的类/对象
 */
@Repository
public class UserDao {
}

UserService:

package com.li.component;

import org.springframework.stereotype.Service;

/**
 * @author 李
 * @version 1.0
 * @Service 标识该类是一个Service类/对象
 */
@Service
public class UserService {
}

UserAction:

package com.li.component;

import org.springframework.stereotype.Controller;

/**
 * @author 李
 * @version 1.0
 * @Controller 标识该类是一个控制器Controller,通常该类是一个Servlet
 */
@Controller
public class UserAction {
}

MyComponent:

package com.li.component;

import org.springframework.stereotype.Component;

/**
 * @author 李
 * @version 1.0
 * @Component 用于标识该类是一个组件,是一个通用的注解
 */

@Component
public class MyComponent {
}

上面我们在类中添加了注解,但是还没有在配置文件中指定容器要扫描哪个包下的注解类

3.配置beans04.xml:

<!--配置容器要扫描的包:
    1.component-scan 表示对指定的包下的类进行扫描,并创建对象到容器
    2.base-package 指定要扫描的包
    3.下面整个配置的含义是:当spring容器创建/初始化时,会扫描 com.li.component 包下
      的所有含有四种注解(Controller/Service/Repository/Component)的类,
      并将其实例化,生成对象,放入到ioc容器
-->
<context:component-scan base-package="com.li.component"/>

注意引入context命名空间

4.测试

//通过注解来配置Bean
@Test
public void setBeanByAnnotation() {
    ApplicationContext ioc = new ClassPathXmlApplicationContext("beans04.xml");
    System.out.println("ok");
}

System.out.println("ok");旁打上断点,点击debug。

查看ioc对象-->beanFactory-->singletoObjects-->table的属性。因为table属性有很多null值,为了显示方便,这里配置了IDEA不显示null值

image-20230119172330944

如下,spring容器中成功创建了四个对象,并且在默认情况下,按照注解方式进行扫描创建的对象,它对应的id就是它的类名(首字母小写)

其他的对象是系统自带的

image-20230119172804431

查看类型id(key)

image-20230119172903347

因为配置的这四个对象是单例对象,因此可以直接通过类的类型来获取:

因为spring在创建时赋予了默认id,也可以通过id来获取

//通过注解来配置Bean
@Test
public void setBeanByAnnotation() {
    ApplicationContext ioc = new ClassPathXmlApplicationContext("beans04.xml");
    UserDao userDao = ioc.getBean(UserDao.class);
    UserService userService = ioc.getBean(UserService.class);
    UserAction userAction = ioc.getBean(UserAction.class);
    MyComponent myComponent = ioc.getBean(MyComponent.class);
    System.out.println("userDao=" + userDao);
    System.out.println("userService=" + userService);
    System.out.println("userAction=" + userAction);
    System.out.println("myComponent=" + myComponent);
    System.out.println("ok");
}
image-20230119173810459

3.1.3注意事项和细节

  1. 基于注解配置bean,需要导入spring-aop.jar包

  2. 必须在Spring配置文件中指定“自动扫描的包”,IOC容器才能够检测到当前项目中哪些类被标识了注解

    (1)在配置时注意导入context名称空间

    (2)指定扫描的包时,可以使用通配符,如:com.li.component.*表示扫描com.li.component包下的类, 包括com.li.component包下的子包(递归扫描)

  3. Spring的IOC容器不能检测一个使用了@Controller注解的类到底是不是一个真正的控制器。注解的名称只是用于程序员自己识别当前标识的是什么组件。其他的注解@Service、@Reposity 也是一样。

    也就是说,Spring的容器只要检测到注解就会生成对象,但是这个注解的含义spring不会识别,只是给程序员方便区分的

    如果你只在spring容器上用,@Controller、@Service、@Reposity基本是等价的;如果你用在springmvc上面,它们是有区别的:彻底弄懂@Controller 、@Service、@Component

  4. 配置只扫描满足要求的类:

    如下面的resource-pattern="User*.class",表示扫描指定包下以User开头的类

    <context:component-scan base-package="com.li.component" 
                            resource-pattern="User*.class" />
    

    一般来说,想要扫描某个类只需要写上注解,不想扫描的类就不会写注解,因此上面这种写法不常使用

  5. 配置排除扫描的类:

    如果我们希望排除某个包/子包下的某种类型的注解,可以通过exclude-filter来指定

    (1)context:exclude-filter 指定要排除哪些类

    (2)type 指定排除方式(annotation 表示通过注解来排除)

    (3)expression 指定要排除的注解的全路径

    下面的配置表示,在扫描com.li.component包下注解的类时,排除以@Service注解的类

    <context:component-scan base-package="com.li.component" >
    <!-- 排除哪些类, 以 annotaion注解为例(通过注解来排除) -->
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
    </context>
    
  6. 自定义规则指定扫描哪些注解类:

    <!--如果我们希望通过自己的规则,来扫描包/子包下的某些注解类,可以通过include-filter
        1. use-default-filters="false": 表示不使用默认的过滤/扫描机制
        2. context:include-filter: 表示只是扫描指定的注解的类
        3. type="annotation" 表示按照注解方式来扫描
        4. expression="org.springframework.stereotype.Controller" 指定要扫描的注解的全类路径
     -->
    <context:component-scan base-package="com.li.component" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    
  7. 在默认情况下,注解标识的类创建对象后,在容器中它默认对应的id就是它的类名(首字母小写)

  8. 也可以使用注解的value属性指定 id 值,并且 value 可以省略:

    image-20230119185023801 image-20230119202735732

3.2手动开发-简单的Spring基于注解配置的程序

3.2.1需求说明

自己写一个简单的Spring容器,通过读取类的注解(@Component、@Controller、@Service、@Repository),将对象注入到IOC容器。即不使用Spring原生框架,我们自己使用IO+Annotation+反射+集合实现,加深对Spring注解方式开发的理解。

3.2.2思路分析

3.2.3代码实现

步骤一.搭建基本结构并获取扫描包

1.ComponentScan注解

package com.li.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author 李
 * @version 1.0
 * 模仿spring原生注解,自定义一个注解
 * 1. @Target(ElementType.TYPE) 指定ComponentScan注解可以修饰TYPE元素
 * 2. @Retention(RetentionPolicy.RUNTIME) 指定ComponentScan注解 的保留范围
 * 3. String value() default "";  表示 ComponentScan 可以传入一个value值
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface ComponentScan {
    String value() default "";
}

2.MySpringConfig配置类

package com.li.annotation;

/**
 * @author 李
 * @version 1.0
 * 这是一个配置类,作用类似我们原生spring的容器配置文件beans.xml
 */
@ComponentScan(value = "com.li.component")
public class MySpringConfig {
}

未完。。。

本文转载于网络 如有侵权请联系删除

相关文章

  • 李宏毅《机器学习》丨5. Tips for neural network design(神经网络设计技巧)

    Author:AXYZdong 李宏毅《机器学习》系列 参考视频地址:https://www.bilibili.com/video/BV1Ht411g7Ef 参考文档:DataWhale文档 文章目录一、局部最小值与鞍点二、批次与动量三、自动调整学习速率四、损失函数的影响五、批次标准化五、总结一、局部最小值与鞍点OptimizationFailsbecause…localminima(局部最小值)saddlepoint(鞍点) ▲优化失败原因二、批次与动量OptimizationwithBatch ▲批次优化GradientDescent+Momentum ▲带动量的梯度下降三、自动调整学习速率RMSProp(rootmeansquareprop,均方根) 学习原理∶在自适应梯度基础上引入了衰减因子,在梯度累积的时候,会对“过去”与“现在”做一个平衡,通过超参数进行调节衰减量。 适合处理非平稳目标(也就是与时间有关的),对于RNN效果很好。 ▲RMSPropAdam(Adaptivemomentumoptimization,自适应动量优化) 是目前深度学习中最流行的优化方法,它结合了自

  • Linux Systemd 实战

    Systemd是Linux系统工具,用来启动守护进程,已成为大多数发行版的标准配置。本文在实际运用中介绍相关用法。 安装systemctlubuntu默认安装systemd,如果没有可以手动安装aptinstallsystemd-sysv aptinstallsystemctl复制之后需要重启开机启动对于那些支持Systemd的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件。如果你想让该软件开机启动,就执行下面的命令(以httpd.service为例)。$sudosystemctlenablehttpd复制上面的命令相当于在/etc/systemd/system目录添加一个符号链接,指向/usr/lib/systemd/system里面的httpd.service文件。 这是因为开机时,Systemd只执行/etc/systemd/system目录里面的配置文件。这也意味着,如果把修改后的配置文件放在该目录,就可以达到覆盖原始配置的效果。启动服务设置开机启动以后,软件并不会立即启动,必须等到下一次开机。如果想现在就运行该软件,那么要执行sy

  • 数据中台最后一公里:数据服务管理

    数据的价值一个是数据驱动决策,主要通过数据可视化平台、自助BI分析工具提升决策分析效率。另一个是数据在业务端的创新应用,主要是API接口服务的方式,即DAAS(dataAPIasaservice)。数据化运营时代,对API接口的需求与日俱增。例如APP首页的千人千面的个性化推荐接口,根据用户历史消费订单数实时弹屏新客大礼包,根据访问用户所处的生命周期,制定差异化的用户激励运营策略等。你们公司,目前是如何构建和管理数据API服务的呢?一、数据服务的痛点1.接口开发流程长通常一个普通API接口的开发,需要数据开发工程师将数据按照业务逻辑进行清洗加工,再由Java开发人员进行接口变现,即可以让业务端通过接口调用数据,例如实时查询当前访问用户的历史累计订单数,以判断用户是新客,进而派发新客大礼包。对于个性化推荐接口,算法人员基于数仓模型进行特征数据分析处理,模型开发、训练调优,然后将模型提供给接口开发人员进行实时的推理服务。不管是哪种形式的接口,都会涉及多个工种,经过N个环节,一个接口的上线周期至少以周为单位,这个时效对于业务端创新应用的支撑是远远不够的。2.开发人员稳定性差对于普通的API接

  • Flutter如何状态管理

    ####目录介绍-01.什么是状态管理-02.状态管理方案分类-03.状态管理使用场景-04.Widget管理自己的状态-05.Widget管理子Widget状态-06.简单混合管理状态-07.全局状态如何管理-08.Provider使用方法-09.订阅监听修改状态###推荐-fluterUtils工具类库:https://github.com/yangchong211/YCFlutterUtils-flutter混合项目代码案例:https://github.com/yangchong211/YCHybridFlutte###01.什么是状态管理-响应式的编程框架中都会有一个永恒的主题——“状态(State)管理”-在Flutter中,想一个问题,`StatefulWidget`的状态应该被谁管理?-Widget本身?父Widget?都会?还是另一个对象?答案是取决于实际情况!-以下是管理状态的最常见的方法:-Widget管理自己的状态。-Widget管理子Widget状态。-混合管理(父Widget和子Widget都管理状态)。-不同模块的状态管理。-如何决定使用哪种管理方法?下面

  • 分享几个常用的Python函数,助你快速成为Pandas大神!!

    在Python当中模块Pandas在数据分析中以及可视化当中是被使用的最多的,也是最常见的模块,模块当中提供了很多的函数和方法来应对数据清理、数据分析和数据统计,今天小编就通过20个常用的函数方法来为大家展示一下其中的能力,希望大家能有所收获。 1.读取数据Pandas当中的read_csv的方法能够去读取csv类型的文件,然后转化成类似于表格形式的dataframe,marketing=pd.read_csv("DirectMarketing.csv") groceries=pd.read_csv("Groceries_dataset.csv") df=pd.read_csv("Churn_Modelling.csv")复制要是我们只想展示一部分,比方说其中几行的数据,当然也可以这么来操作df=pd.read_csv("Churn_Modelling.csv",nrows=5000) df.shape (5000,14)复制当然其中几列的数据,也可以这么来操作,例如下面的代码选中“Gender”、“Age

  • 5 分钟理解百度 ERNIE 核心思想

    ❝本文主要帮助读者超短时间内理解ERNIE核心思想,适合正在准备面试百度的同学(如果需要内推可以找我)。如果想要细致了解ERNIE的各个细节,建议读原论文:ERNIE1.0和ERNIE2.0 ❞本文假设读者对Transformer以及BERT有一定的了解。ERNIE1.0「ERNIE1.0主要是改进了BERT的MLM任务。」我们看图说话,从图中,我们很容易发现ERNIE1.0对于BERT的改进是在MLM任务。在论文,作者阐述了三种不同的mask技巧:基础mask:任意mask一个单词(BERT所采用的mask类型)短语mask:不是将单词看成一个整体,而是将短语看成一个整体;(比如上图中,mask了aseriesof而不仅仅是of)实体mask:mask一个实体名。(比如上图中,mask的是J.K.Rowling,而不是K.)好了,这样子最初版的ERNIE就讲完了。下面我们开始讲ERNIE2.0.ERNIE2.0「ERNIE2.0主要是在ERNIE1.0的基础上,使用了新的多任务训练的框架。」BERT的预训练中,采用了MLM和NSP两种任务,目的是为了让模型能够学出更好的词表示向量,以

  • 2020,金融机构们就搞的出“中台”吗?

    2019年,也许算是我国金融界的“中台元年”,“中台”这个概念现在是又时髦又“潮”,数据中台、业务中台、中台战略、中台部门… 各种云山雾罩的,层出不穷。反正每年管理咨询公司们、科技企业们、网红技术大牛们总得发明几个Sexy的概念引领潮流,可是“中台”它本尊,具体的“实物”形态是什么?“战略”又是如何?围绕它的组织长啥样的?在金融机构里又是如何结合行业特点?对业务有什么“肉眼可见”的作用?最重要的是,当你满腔热情把“中台”如数家珍、娓(Zi)娓(Shuo)道(Zi)来(Hua)的时候,你家CEO、总裁、董事长他老人家知道吗?其实全球的传统金融机构都在宣扬科技化、都在声称进行数字化转型、都在表示很重视金融科技,一年比一年热闹,可是只能说处于“形成氛围”的阶段吧?现实里科技化还是漫漫长路、困难重重。总结一下,起码有以下十个不同角度的难处。01面对没有科技基因的领导班子在全球大部分的金融机构里,迄今处于领导位置的高管们,以业务专家为主。《银行4.0》的作者布雷特金有一个说法,大意是观察一家声称在搞数字化转型的、科技化的金融机构是否真的在推行科技,最简单的做法是去他们的网站上看看高管和外部独董名

  • 不用找了,基于 Redis 的分布式锁实战来了!

    作者:菜蚜my.oschina.net/wnjustdoit/blog/1606215前言:在分布式环境中,我们经常使用锁来进行并发控制,锁可分为乐观锁和悲观锁,基于数据库版本戳的实现是乐观锁,基于redis或zookeeper的实现可认为是悲观锁了。乐观锁和悲观锁最根本的区别在于线程之间是否相互阻塞。那么,本文主要来讨论基于redis的分布式锁算法问题。从2.6.12版本开始,redis为SET命令增加了一系列选项(set[key]NX/XXEX/PX[expiration]):EXseconds–设置键key的过期时间,单位时秒PXmilliseconds–设置键key的过期时间,单位时毫秒NX–只有键key不存在的时候才会设置key的值XX–只有键key存在的时候才会设置key的值原文地址:https://redis.io/commands/set 中文地址:http://redis.cn/commands/set.html注意:由于SET命令加上选项已经可以完全取代SETNX,SETEX,PSETEX的功能,所以在将来的版本中,redis可能会不推荐使用并且最终抛弃这几个命令。

  • Creator组件化的编程探索

    使用CocosCreator已经一年了,在此期间一直在摸索,如何才是组件化编程的最优实践。Shawn属于半野生的路子,水平不高,但不时会陷入一些问题瞎琢磨。我根据自己的经验,总结了一套组件化编程模型:法宝与结界模型。但在介绍法宝、结界组件模型之前,先回顾一下控件和组件的概念。一、控件与组件在Cocos2d-x/lua/js的年代,UI元素都以控件类的形式存在。只有cc.Node的子类才能在界面上显示,例如:cc.Image、cc.Button、cc.Text。我们编写的界面代码也属于cc.Node的子类或系统控件的子类。在Creator中我们自己编写的cc.Component的子类脚本,能称之为控件吗?1.我所理解的控件我觉得要能称的上控件,必须是能够被界面编辑器和代码所控制,并能相对独立完成一项或多项任务的程序模块。而且控件具有一定范围的通用性,可以独立运行,可以被独立测试。我们要自定控件,一类是cc.Componet子类脚本+预制体的结合;第二类是纯cc.Componet的子类脚本(不含预制体),也可以是系统组件的派生类。不含预制体的脚本其实是引擎自动帮我们生成的,当拖入一个组件脚

  • 网络知识 -- 第一部

    1丶初始网络网络的体系是一个庞大的体系,涉及到路由交换,安全,无线,语言,数据中心等等多个方面.①网络基础知识:涉及到网络的发展历程,网络的一些名词概念,路由交换介绍②OSI七层模型的介绍③TCP/IP协议簇的简介,包含TCP/IP三次握手和四次挥手的过程④VLSM可变长子网的概念 2丶网络拓扑 网络拓扑(NetworkTopology)结构是指用传输介质互连各种设备的物理布局。指构成网络的成员间特定的物理的即真实的、或者逻辑的即虚拟的排列方式。如果两个网络的连接结构相同我们就说它们的网络拓扑相同,尽管它们各自内部的物理接线、节点间距离可能会有不同。实质上网络拓扑就是类似于网络设备组成的一个连接图,通过设备的连接图可以判断设备的连接情况,便于出现故障时,根据拓扑图更快的定位故障点。对于配置网络设备之前,一定要对网络设备进行规划,也就是网络设备如何进行连接,进而形成一个网络设备的连接图,即网络拓扑(类似于网络设备规划的地图)3丶网络的概念与发展 简单理解网络的概念:就是计算机网络,有许许多多电子设备互联构建而成的一个IP的网络。网络的演变发展过程:简单的网络,是由两根网线将两个网络设备连

  • 闭关3年的“未来餐厅”向百万商家开放,饿了么要造餐饮业安卓?

    外卖市场正在向头部平台集中,而头部平台,也在悄然进化。7月9日,饿了么宣布旗下“未来餐厅”年交易额已突破10亿元,目前已在30多个城市开设数百家线下店,并孵化出数个年交易额过千万乃至过亿的“外卖网红”品牌,这是饿了么在2016年对外公布“未来餐厅”战略后首次对外披露运营数据。 “未来餐厅”是什么?“未来餐厅”是饿了么向餐饮行业重度渗透的尝试。2016年8月8日,饿了么举办“未来餐厅”发布会,面向餐饮商家宣传“未来餐厅”是“餐饮赚钱好项目”,甚至会“引领餐饮产业未来”。对于餐饮创业者来说,“未来餐厅”让他们抓住正在崛起的外卖市场,餐饮创业看上去是低门槛创业,实质上却很难赚钱,要打造品牌更是难上加难,物业成本过高、品类选择不好、门店选址不当、采购把关不严、人员管理不好,都是坑。外卖平台的出现,让敏锐的餐饮创业者嗅到了机会:如果能从互联网获取订单,物业成本就可以降低,也可以突破传统门店服务能力的上限。现在,我们打开外卖App,会发现越来越多未曾见到的品牌,而且不少都很受欢迎,它们就是纯外卖品牌,这跟“淘品牌”的规模化出现一样:传统品牌可以到淘宝卖货,但做得最好的,却是专门面向电商消费者甚至淘

  • 如何搭建微信小程序 HTTPS 服务器?只需三个步骤

    知晓程序注:微信小程序中,要求所有服务器通讯使用HTTPS协议的安全连接(即增加SSL加密)。也就是说,除了按照小程序要求进行数据收发,还要为服务器配置加密证书。这就让不少小程序开发者非常头疼。知晓程序(微信号zxcx0101)今天为大家推荐这篇文章,可以帮助大家快速申请加密证书、配置HTTPS服务器,并尽快将小程序应用于生产环境中。本篇文章以阿里云为例,展示证书申请、配置等。此方法也可举一反三,应用于其他云服务器中。文|一斤代码在小程序的生产环境中,如果需要调用服务器的RESTAPI或WebSocket,服务器必须提供安全的链接地址。也就是说,服务器需要使用SSL加密数据。因此,我们需要在服务器中配置SSL加密。第一步:申请服务器与域名许多云服务商的云服务器配置是弹性的,可以根据自己的需要来选择合理的配置,如果你是个初学者为了学习用的话,一开始选择最低配置就行了。当然,如果你有业务需求,也可以选择更高配置的服务器。小程序的网络访问必须使用白名单中的地址,这意味着我们需要一个域名,便于加入微信的域名白名单中。你可以在云服务商直接提供的域名购买服务中购买域名,也可以到域名服务商购买。第二

  • 一篇文章了解中国ERP发展史

    提起中国ERP,我们更多的会想到用友、金蝶,但是在中国ERP的发展史上,金蝶和用友并不是中国ERP的鼻祖,虽然有些厂商的名字已经被人遗忘,但是正因为有他们才有了中国ERP的今天。 利玛、启明、开思能够熟悉他们名字的,绝对是这个行业的前辈,但是他们也从中国ERP的先驱变了先烈,而这样的故事每天都在上演。用友、金蝶则是从财务软件转到ERP的本土厂商,后来国外巨头将这开始深耕中国这块市场,这就是中国ERP市场的一个大概脉络。 前世:知识成为一股力量 上世纪70年代末,中国开始回归到经济建设上来,企业在经济生活中的重要角色也开始被人们重新认识,关于企业管理的现代化讨论开始在相关的政府官员以及一些企业人士中小范围的进行。 1981年,沈阳第一机床厂从德国工程师协会引进了中国第一套企业应用的MRPII软件,而其时,MRP及MRPII在西方发达工业国家和我国港澳地区已广泛应用多年。 上世纪80年代中后期,珠江三角洲已成为我国改革开放的前沿阵地,越来越多外资背景的企业开始在中国落地生根,并衍生出众多专事加工制造的中小企业。当成为国际供应链上的一员时,在管理上已经要求这些加工制造企业寻找跟国际接轨的管理

  • Docker容器实战五:镜像与容器

    本文将讲解关于镜像与容器的工作原理,通过本文的介绍,读者可以对产品的使用有更加深入的理解。 一.bootfs和rootfs通常而言,Linux的操作系统由两类文件系统组成:bootfs(bootfilesystem)和rootfs(rootfilesystem),它们分别对应着系统内核与根目录文件。bootfs层主要为系统内核文件,这层的内容是无法修改的。当我们的系统在启动时会加载bootfs,当加载完成后整个内核都会存到内存中,然后系统会将bootfs卸载掉。而rootfs层则包含了系统中常见的目录和文件,如/bin,/etc,/proc等等。Docker的镜像技术可以使用宿主机的bootfs层,这使得镜像本身只需要封装rootfs层所需要的文件和工具即可。因此,镜像可以根据需要进行定制化封装,减少占用的存储空间,如部分极精简的镜像只有几MB大小。 在不同Linux发行版本中,它们之间的主要区别在于rootfs层,比如ubuntu使用apt管理软件,而Centos使用yum方式。而在内核层面,两者的差别并不大。因此,我们可以在一台主机上同时支持不同Linux系统的镜像而不出现报错,如

  • Kubernetes之(十六)Dashboard认证访问

    目录Kubernetes之(十六)Dashboard认证访问Dashboard部署token认证kube-config认证总结参考资料 Kubernetes之(十六)Dashboard认证访问 Dashboard:https://github.com/kubernetes/dashboard Dashboard部署 下载yaml文件 [root@mastermanifests]#wgethttps://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml 复制 查看yaml deployment的image需要从k8s.gcr.io仓库下载,国内无法拉取成功。两种方法: 提前在node节点拉取镜像kubernetes-dashboard-amd64:v1.10.1,然后dockertag修改标签。 直接把yaml文件内的image修改为可用的仓库, [root@mastermanifests]#vimkubernetes-dash

  • 数组的例题

    编程练习 在一个大学的编程选修课班里,我们得到了一组参加该班级的学生数据,分别是姓名、性别、年龄和年级,接下来呢,我们要利用JavaScript的知识挑出其中所有是大一的女生的的名字哦。 学生信息如下:    ('小A','女',21,'大一'), ('小B','男',23,'大三'),     ('小C','男',24,'大四'),  ('小D','女',21,'大一'),     ('小E','女',22,'大四'), ('小F','男',21,'大一'),     ('小G','女',22,'大二'), ('小H','女',20,'大三'),     ('小I','女',20,'大一'), ('小J','男',20,'大三') 任务 第一步:把这些数据组成一个数组,方便我们之后操作哦。 提示:使用二维数组。复制 第二步:筛选

  • 弈悟计划——大一C程期末实验之五子棋AI的开发日志

    写在前面 大一C程的期末作业,因为觉得从头学C太没意思,因此报了学校的什么挑战班(早知道不换了去混绩点了) 由于本人懒得要死,刚开始想手搓GUI,然后看了各种图形界面感觉徒增烦恼,就随便找了个看起来最简单的EasyX使用 不过自己码到一半(其实才写了一百行不到)就破防了,感觉再这样下去一个GUI就够我写到学期结束了 遂在网上找了个五子棋图形界面的GUI模板,简单改了一下就只要写核心算法部分就好了 平时由于时间问题,不太能抽出时间写这个,一般就在课上慢慢写了,不过由于写过类似的棋类的OI题(好像是紫书上的),感觉应该会是一段不错的经历 由于要统一代码风格,因此放上来的代码都是格式化过的 然后由于要求要用多文件,因此我很粗暴地分了三个文件再Dev里开了个工程跑(其实分了和没分一样) 其中有两个不变的先放出来 main.cpp #define_CRT_SECURE_NO_WARNINGS1 #include"YiWu.h" intmain(){ Menum; m.Display(); return0; } 复制 Yiwu.h #include<graphics.h> #incl

  • Cubieboard2裸机开发之(一)点亮板载LED

    前言      CUbieboard2板载两个LED,一个绿色的,一个蓝色的,其中绿色LED通过三极管与PH20管脚连接,蓝色LED通过三极管与PH21管脚连接,这里只以蓝色LED为例,电路原理图如图1和图2所示。                    图1LED所使用的管脚                       图2LED与三极管连接图 由此可知,当PH21输出高电平时,三极管处于导通状态,从而蓝色LED会被点亮;当PH21输出低电平时,三极管处于截止状态,蓝色LED熄灭。 一、目的    &

  • 查看IIS日志和网站对应的IIS日志文件夹

    右键要查看日志的网站→属性→“网站”选项卡→属性→“常规”选项卡。 “目录”下边的%SystemDrive%\inetpub\logs\LogFiles就是日志保存目录,该路径具体就是C:\inetpub\logs\LogFiles 站点IIS日志 以W3SVC1为例,W3SVC代表万维网服务,1代表部署站点的编号。 文件夹的最后一位数字,就对应着站点ID。   搜索 复制

  • 爬虫 --- 08. 全站爬取(CrawlSpider), 分布式, 增量式爬虫

    一.全站爬取(CrawlSpider)   1.基本概念 作用:就是用于进行全站数据的爬取 -CrawlSpider就是Spider的一个子类 -如何新建一个基于CrawlSpider的爬虫文件 -scrapygenspider-tcrawlxxxwww.xxx.com -LinkExtractor连接提取器:根据指定规则(正则)进行连接的提取 -Rule规则解析器:将链接提取器提取到的链接进行请求发送,然后对获取的页面数据进行 指定规则(callback)的解析 -一个链接提取器对应唯一一个规则解析器复制     2.项目示例 ①.爬取抽屉网多页数据对象 #-*-coding:utf-8-*- importscrapy fromscrapy.linkextractorsimportLinkExtractor fromscrapy.spidersimportCrawlSpider,Rule classChoutiSpider(CrawlSpider): name='chouti' #allowed_domains=['www.ccc.coim'] start_urls

  • 利用bmob平台,使用云端逻辑在Xcode上实现用户注册、登录

    思路:bmob上构建云端逻辑,xcode通过http请求来在不引入bmobSDK的情况下,远程操作bmob上构建的数据库,实现注册、登录。 xcode导入 AFNetWorking-----------------网络请求,AFNetworking请求回的数据默认为nsdictionary,无需进一步转换 MBProgressHUD--------------------异步加载时的菊花显示 1.bmob云端逻辑构建   首先bmob注册,创建应用,拿到secretKey 云端逻辑的调用链接是:  http://cloud.bmob.cn/secretKey/functionName 云端逻辑的编写使用的js,没基础的可学下JS的基础用法,这里提一下 a.js数组创建newArray()、动态添加arr.push(element) b.字典是一种特殊的数组,通过key访问value,字典创建vardic={"key":"value"} c.调用response.send(obj)来返回云端函数处理的结果到xcode,以进一步处理   举个粒子: function

相关推荐

推荐阅读