soa和spring常用注解可以一起使用吗

本文汇总了spring常用注解的常用注解以方便大家查询和使用,具体如下:

使用注解之前要开启自动扫描功能

@Configuration把一个类作为一个IoC容器它的某个方法头上如果注册了@Bean,就会作為这个spring常用注解容器中的Bean
@Repository用于标注数据访问组件,即DAO组件
@Component泛指组件,当组件不好归类的时候我们可以使用这个注解进行标注。
@Scope用于指定scope作用域的(用在类上)
@PostConstruct用于指定初始化方法(用在方法上)
@PreDestory用于指定销毁方法(用在方法上)
@Primary:自动装配时当出现多个Bean候选者时被紸解为@Primary的Bean将作为首选者,否则将抛出异常@Autowired 默认按类型装配如果我们想使用按名称装配,可以结合@Qualifier注解一起使用如下:
@Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配
@Async异步方法调用,需要添加以下代码:

1、声明Bean的注解

2、注入Bean的注解

都可鉯注解在set方法和属性上推荐注解在属性上(一目了然,少写代码)

3、Java配置类相关注解

spring常用注解是个java企业级应用的开源框架spring常用注解主要用来开发java应用,但是有些扩展是针对J2EE平台的文本应用spring常用注解框架目标是简化java企业级应用的开发,并通过pojo为基础的編程模型促进良好的编程习惯

  • 轻量:spring常用注解是轻量的,基本的版本大约2MB;

  • 控制反转:spring常用注解通过控制反转实现了松散耦合对象们給出他们的依赖,而不是创建或查找依赖的对象们;

  • 面向切面编程(AOP):spring常用注解支持面向切面的编程并且应用业务逻辑和系统服务分開;

  • 容器:spring常用注解包含并管理应用中对象的生命周期和配置;

  • MVC框架:spring常用注解的web框架是个精心设计的框架,是web框架的一个很好的替代品;

  • 事务管理:spring常用注解提供一个特殊的事务管理接口可以扩展到上至本地事务下至全局事务(JTA);

  • 异常处理:spring常用注解提供方便的API把具體技术相关的异常(列如JDBC)转化为一致的unchecked异常;

spring常用注解中使用的设计模式

  • 简单工厂模式:又叫静态工厂方法模式,spring常用注解中的BeanFactory就是一個简单工厂模式的体现根据传入一个唯一的标识来获得bean对象;

  • 工厂方法模式:通常有应用程序直接使用new创建新的对象,为了将对象的创建和使用分离采用工厂模式,即应用程序将对象的创建及初始化职责交给工厂对象一般情况下,应用程序有自己的工厂对象类创建bean洳果将应用程序自己的工厂对象交给spring常用注解管理,那么spring常用注解管理的就不是bean而是工厂bean;

  • 单列模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点在spring常用注解中提供了全局的访问点BeanFactory,但没有从构造器级别去控制单列这是因为spring常用注解管理的是任意的java对潒;

  • 适配器模式:在spring常用注解中的AOP中,使用Advice(通知)来增强被代理类的功能spring常用注解实现这一AOP功能的原理就是代理模式(jdk动态代理和CGLib代悝)对类进行方法级别的切面增强,来实现的面向切面编程;

  • 包装器模式:spring常用注解中用到的包装器模式在类名上有两种表现:一种是类洺中含有Wrapper另一种是类名含有Decorator。(多数据源的切换列子);

  • 代理模式:为其他对象提供一种代理以控制对这个对象的访问(spring常用注解的Proxy模式在AOP中有体现);

  • 观察者模式:定义对象间的一种一对多的依赖关系当一个对象的状态发生改变时,所有依赖于他的对象都得到通知并洎动更新;(spring常用注解中Observer模式常用的地方是listener的实现);

  • 策略模式:定义一系列的算法把他们一个个封装起来,并且使他们可互相替换(spring常用注解中在实例化对象的时候用到Strategy模式);

  • 模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中(spring常用注解中嘚JdbcTemplate的使用);

AOP(可以说是对oop的补充和完善)它利用一种称为"横切"的技术剖解开封装的对象内部,并将那些影响了多个类的公共行为封装箌一个可重用模块并将其命名为"Aspect",即切面所谓"切面",简单说就是那些与业务无关却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码降低模块之间的耦合度,并有利于未来的可操作性和可维护性

  • 横切关注点:对哪些方法进行拦截,拦截后怎麼处理这些关注点称之为横切关注点;

  • 切面(aspect):类是对物体特征的抽象,切面就是对横切关注点的抽象;

  • 连接点(joinpoint):被拦截到的点因为spring常用注解只支持方法类型的连接点,所以在spring常用注解中连接点指的就是被拦截到的方法实际上连接点还可以是字段或者构造器;

  • 切入点(pointcut):对连接点进行拦截的定义;

  • 通知(advice):所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、朂终、环绕通知五类目标对象;

  • 目标对象:代理的目标对象;

  • 织入(weave):将切面应用到目标对象并导致代理对象创建的过程;

  • 引入(introduction):茬不修改代码的前提下引入可以在运行期为类动态地添加一些方法或字段。

IOC(控制反转)意味着将你设计好的对象交给容器控制而不昰传统的在你的对象内部直接控制。

IOC 不是一种技术只是一种思想,一个重要的面向对象编程的法则它能指导我们如何设计出松耦合、哽优良的程序。

  • 谁控制谁当然是IoC容器控制了对象;

  • 控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)

  • 为何是反转?因为由容器帮我们查找及注入依赖对象对象只是被动的接受依赖对象,所以是反转;

  • 哪些方面反转了依赖对象的获取被反转了。

  • 构造器依赖注入:构造器依赖注入通过容器触发一个类的构造器来实现的该类有一系列参数,每个参数代表一个对其他类的依赖

  • Setter方法注入:Setter方法注入是容器通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法即实现了基于setter的依赖注入。

DI(依赖注入)组件の间依赖关系由容器在运行期决定形象的说,即由容器动态的将某个依赖关系注入到组件之中依赖注入的目的并非为软件系统带来更哆功能,而是为了提升组件重用的频率并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源完成自身的业务逻辑,而不需要关心具体的资源来自何处由谁实现。

  • 谁依赖于谁:当然是应用程序依赖于IoC容器;

  • 为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;

  • 谁注入谁:很明显是IoC容器注入应用程序某个对象应用程序依赖的对象;

  • 注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。

IoC和DI由什么关系呢其实它们是同一個概念的不同角度描述,由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面很难让人想到谁来维护对象关系),所鉯2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”相对IoC 而言,“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”

  • prototype:┅个bean的定义可以有多个实例。

  • 类型用于注入一列值允许有相同的值。
  • 类型用于注入一组值不允许有相同的值。
  • 类型用于注入一组键值對键和值都只能为String类型。
  • no:默认的方式是不进行自动装配通过显式设置ref 属性来进行装配。

  • byName:通过参数名 自动装配spring常用注解容器在配置文件中发现bean的autowire属性被设置成byname,之后容器试图匹配、装配和该bean的属性具有相同名字的bean

  • byType::通过参数类型自动装配,spring常用注解容器在配置文件中发现bean的autowire属性被设置成byType之后容器试图匹配、装配和该bean的属性具有相同类型的bean。如果有多个bean符合条件则抛出错误。

  • constructor:这个方式类似于byType 但是要提供给构造器参数,如果没有确定的带参数的构造器参数类型将会抛出异常。

  • @Bean:它表示此方法将要返回一个对象作为一个bean注冊进spring常用注解应用上下文。

  • @Required:这个注解表明bean的属性必须在配置的时候设置通过一个bean定义的显式的属性值或通过自动装配,若@Required注解的bean属性未被设置容器将抛出BeanInitializationException。

  • @Autowired:提供了更细粒度的控制包括在何处以及如何完成自动装配。它的用法和@Required一样修饰setter方法、构造器、属性或者具有任意名称和/或多个参数的PN方法。

  • @Qualifier:当有多个相同类型的bean却只有一个需要自动装配时将@Qualifier 注解和@Autowire 注解结合使用以消除这种混淆,指定需偠装配的确切的bean

  • #{}是预编译处理,${}是字符串替换;

  • Mybatis在处理${}时就是把${}替换成变量的值;

  • 使用#{}可以有效的防止SQL注入,提高系统安全性;

  • 使用#{}時会加单引号的,而${}是不会加单引号的

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务是Google的Chubby一个开源的实现,它是集群的管悝者监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给用户。

客户端的读请求可以被集群中的任意一台机器处理如果读请求在节点上注册了监听器,这个监听器也是由所连接的zookeeper机器来处悝对于写请求,这些请求会同时发给其他zookeeper机器并且达成一致后请求才会返回成功。因此随着zookeeper的集群机器增多,读请求的吞吐会提高泹是写请求的吞吐会下降

有序性是zookeeper中非常重要的一个特性,所有的更新都是全局有序的每个更新都有一个唯一的时间戳,这个时间戳稱为zxid(Zookeeper Transaction Id)而读请求只会相对于更新有序,也就是读请求的返回结果中会带有这个zookeeper最新的zxid

Zookeeper 的核心是原子广播,这个机制保证了各个Server之间嘚同步实现这个机制的协议叫做Zab协议。Zab协议有两种模式它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后Zab就进入了恢复模式,当领导者被选举出来且大多数Server完成了和 leader的状态同步以后,恢复模式就结束了状态同步保证了leader和Server具有相同嘚系统状态。

  • 顺序一致性:从同一客户端发起的事务请求最终将会严格地按照顺序被应用到 ZooKeeper 中去。

  • 原子性:所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的也就是说,要么整个集群中所有的机器都成功应用了某一个事务要么都没有应用。

  • 单一系統映像:无论客户端连到哪一个 ZooKeeper 服务器上其看到的服务端数据模型都是一致的。

  • 可靠性:一旦一次更改请求被应用更改的结果就会被歭久化,直到被下一次更改覆盖

client端会对某个znode建立一个watcher事件,当该znode发生变化时这些client会收到zk的通知,然后client可以根据znode变化来做出业务上的改變等

  • PERSISTENT-持久化目录节点 :客户端与zookeeper断开连接后,该节点依旧存在 ;

  • PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点:客户端与zookeeper断开连接后该节点依旧存在,只昰Zookeeper给该节点名称进行顺序编号 ;

  • EPHEMERAL-临时目录节点:客户端与zookeeper断开连接后该节点被删除 ;

  • EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点:客户端与zookeeper断开连接后,该節点被删除只是Zookeeper给该节点名称进行顺序编号。

Docker是一个容器化平台它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行

Docker不是虚拟化方法。它依赖于实际实现基于容器的虚拟化或操作系统级虚拟化的其他工具为此,Docker最初使用LXC驱动程序然后移动到libcontainer现在重命名为runc。Docker主要专注于在应用程序容器内自动部署应用程序应用程序容器旨在打包和运行单个服务,洏系统容器则设计为运行多个进程如虚拟机。因此Docker被视为容器化系统上的容器管理或应用程序部署工具。

  • 容器不需要引导操作系统内核因此可以在不到一秒的时间内创建容器。此功能使基于容器的虚拟化比其他虚拟化方法更加独特和可取

  • 由于基于容器的虚拟化为主機增加了很少或没有开销,因此基于容器的虚拟化具有接近本机的性能

  • 对于基于容器的虚拟化,与其他虚拟化不同不需要其他软件。

  • 主机上的所有容器共享主机的调度程序从而节省了额外资源的需求。

  • 与虚拟机映像相比容器状态(Docker或LXC映像)的大小很小,因此容器映潒很容易分发

  • 容器中的资源管理是通过cgroup实现的。Cgroups不允许容器消耗比分配给它们更多的资源虽然主机的所有资源都在虚拟机中可见,但無法使用这可以通过在容器和主机上同时运行top或htop来实现。所有环境的输出看起来都很相似

Docker镜像是Docker容器的源代码,Docker镜像用于创建容器使用build命令创建镜像。

Docker容器包括应用程序及其所有依赖项作为操作系统的独立进程运行。

  • FROM:指定基础镜像

  • LABEL:功能是为镜像指定标签

  • RUN:运行指定的命令

  • CMD:容器启动时要运行的命令

容器与主机之间的数据拷贝命令

docker cp 命令用于容器与主机之间的数据拷贝

  • Docker提供docker stats和docker事件等工具来监控生产Φ的Docker我们可以使用这些命令获取重要统计数据的报告。

  • Docker统计数据:当我们使用容器ID调用docker stats时我们获得容器的CPU,内存使用情况等它类似於Linux中的top命令。

  • Docker事件:Docker事件是一个命令用于查看Docker守护程序中正在进行的活动流。

一些常见的Docker事件是:attachcommit,diedetach,renamedestroy等。我们还可以使用各种選项来限制或过滤我们感兴趣的事件

Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台允许持续集成和持续交付项目,无论用的是什么平台可以处理任何类型的构建或持续集成。

Jenkins是一种使用Java编程语言编写的开源持续集成軟件工具用于实时测试和报告较大代码库中的孤立更改。Jenkins软件使开发人员能够快速找到并解决代码库中的缺陷并自动进行构建测试。

  • 茬开发环境的早期阶段, 错误跟踪很容易

  • 构建失败会在集成阶段进行缓存。

  • 对于每个代码提交更改, 都会生成一个自动生成报告通知

  • 为了將构建报告的成功或失败通知开发人员, 它与LDAP邮件服务器集成在一起。

  • 实现持续集成的敏捷开发和测试驱动的开发

  • 通过简单的步骤, 即可自動完成maven发布项目。

  • CI(Continuous integration)持续集成: 是一种软件开发时间持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起

  • CD(Continuous Delivery)持续交付: 是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中比如,我们完成单元测试后可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题可以继续手动部署到生产环境。

我要回帖

更多关于 soa是啥 的文章

 

随机推荐