Spirng框架介绍

  1. Spirng是什么和优缺点
    首先Sping是一个03年兴起的轻量级,非侵入型,自带事务管理,和易集成的开源框架,虽然他公司说是轻量级的一个框架但是慢慢的随着时间积累,往大了说就是什么SpringMVC,SpringBoot ,SpringData,Spring Cloud,Framework,自身体系已经很庞大了,当他使用延伸技术并且组合起来,需要一个一个的配置,然后还有个版本兼容性问题,为了解决这个问题Spring也提供SpringBoot来解决这个问题。可以先不关心如何配置,简化了 spring 的配置流程,简化了 spring 的配置各种XML流程,加入 starter 就配置好了,直接使用,毕竟这个东西还是从美国那发展学过来的 遵守’好莱坞法则’(别找我们,我们找你)也不过分。先忽略这些当然Spring 核心还是IOC(DI DL ==) AOP。

  2. IOC
    IOC(Inversion of Control,控制反转)不是一种技术,类似MVC,OOP只是一种思想。

    平时在开发的时候,每个对象在需要使用它时,都要将它创建出来(new 对象),是由自己主动创建出来的。主动权在自己手上,需要主动创建就牵扯到耦合性高这个东西。(耦合性概念:A对象需要使用合作对象B来共同完成一件事,A要使用B,那么A就对B产生了依赖,也就是A和B之间存在一种耦合关系,并且是紧密耦合在一起。)都说高内聚低耦合。

    使用了Spring之后那就不一样了,创建合作对象B的工作是由Spring来做的,Spring创建好B对象,然后存储到一个容器里面,当A需要B,Spring就从容器里面取出A要要的B,给A使用,至于Spring是如何创建以及什么时候创建好对象A不用管。

    所以控制反转IOC是说创建对象的控制权进行转移,从以前自己把控的到现在这种权力交给SpringIOC容器,它就是一个专门用来创建对象的工厂,你要什么对象,它就给你什么对象,有了 IOC容器,依赖关系就变了,原先的依赖关系就没了,通过IOC容器来建立它们之间的关系。也就是就是由spring来负责控制对象的生命周期和对象间的关系。

    还有一种好解释的说法
    IOC的一个重点是在系统运行中,动态的向某个对象提供它所要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了 spring我们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖 Connection才能正常运行,而这个Connection是由spring注入到A中的,依赖注入的名字就这么来的。那么DI是如何实现的呢?

    上面俩点都说到了一个工厂,原理是Jdk1.3之后的反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。


  3. AOP
    之前OOP,在设计规模更大、逻辑更复杂的系统时,开发周期能变的更短。然而,OOP设计的唯一问题是,本质是静态的,封闭的,任何需求的细微变化都可能对开发进度造成重大影响。所有广为人用的框架/技术等.基本都是两个目的:1.软件开发期(写代码,测试,上线)内,让开发人员用更少的代码完成同样的功能实现。2.软件上线后的维护升级器,让让开发人员用更少的代码完成同样的功能实现。所以AOP是对这个OOP的补充

(1)切面(Aspect)(2)通知(Advice)(3)目标(Target): 被通知的对象(4)代理(Proxy): 向目标对象应用通知之后创建的对象。(5)连接点(6)切点(pointcut)
写日志是一个很好的编程习惯,不用AOP技术的话,我们应该怎么写日志?

System.out.println(“方法a开始执行”);

public void a(){

System.out.println("我是一个方法");

}
System.out.println(“方法a执行成功”);

上述是一个很简单的日志.两行代码也不多.

可是在真实开发中,面对100个甚至1000个方法时,这样写你会不会被累死?

如果用AOP的话,我们用一个方法就可以搞定所有的日志!

@Around(“bean(*Service)”)//指定要监控的bean中的方法
public Object testObject(ProceedingJoinPoint jp) throws Throwable{ //参数的意思是代理执行原软件中的方法
System.out.println(jp.getSignature()+“开始执行”); //在方法执行之前执行
Object val = jp.proceed();
System.out.println(jp.getSignature()+“执行成功”);//在方法执行之后执行
return val;
}

OK!,搞定.现在所有业务层的方法执行前后都会打出日志了!.
一个方法搞定了需要机械重复的复制粘贴几百行的工作!这就是AOP。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值