我的第一个技术博客

xiaoxiao2021-02-28  108

这是我的第一个个人技术博客。

 

毕业一年,从事这个行业也有半年的时间了。目前我还是小白一枚。开此博客不是为了供大家学习,而是为自己记录下所学过的知识,这样能够加深理解,也为之后学习的人提供借鉴(大牛及查找资料学习的人请绕行)。我觉得我目前需要学习的不仅仅是知识,还有让别人了解我水平的能力。俗话说:不想当架构狮的程序媛不是好程序媛。希望通过csdn来见证我的成长。

 

今天要记录的是我对Spring的理解。(部分内容引用自其他技术博客)

 

Spring主要有IOC和AOP两个方面。

一、IOC(Inversionof Control:控制反转)

在JAVA开发中,IOC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制。这称为控制反转。

举个栗子:

classPerson {

         private Bike myBike;

         publicPerson() {

         myBike= new Bike();

         }

         publicvoidgo() {

         System.out.println("出发!");

         myBike.drive();

         }

}

publicclassTest1 {

         publicstaticvoidmain(String[] args) {

         Personperson = new Person();

         person.go();

        }

}

我们创建了一个 Person 类,它有一台自行车,我们可以骑自行车出门。但如果这时我们想要更改出门方式比如开车出门时,我们就必须修改代码了。内容如下:

classPerson {

         private Car myCar;

         publicPerson() {

         myCar= new Car();

         }

         publicvoidgo() {

         System.out.println("出发!");

         myCar.drive();

         }

}

此处省略Test1方法。

我们都知道,频繁的修改代码绝不是一个好事情。我们需要做的应该是创建一个Person类,无论是坐飞机还是开坦克都随你,但不需要修改Person的任何代码。这就需要用到依赖注入的知识了。

classPerson {

         private Driveable myDriveable;

         publicPerson(Driveable driveable) {

         this.myDriveable =driveable;

         }

         publicvoidgo() {

         System.out.println("出发!");

         myDriveable.drive();

         }

}

publicclassTest1 {

         publicstaticvoidmain(String[] args) {

         Bikebike = new Bike();

       Car car = new Car();

Person person1 = new Person(bike);

Person person2 = new Person(car);

         person1.go();

       person2.go();

        }

}

这样做的好处显而易见。此时我们再也不需要关心我们会用何种出行方式了,只需要将我们需要的出行方式的对象作为参数传入构造器中就可以了。

这种把内部依赖的创建权力移交给了其他模块的思想就是IOC。也就是说 Person 只关心依赖提供的功能,但并不关心依赖的创建。

 

二、AOP(Aspect-OrientedProgramming:面向切面编程)

AOP有几个关键词:

1、切面(Aspect):一个关注点的模块化,这个关注点可能会横切多个对象。在Spring AOP中,切面可以使用基于模式或基于@Aspect注解的方式来实现。

2、连接点(JoinPoint):在程序执行过程中某个特定的点,比如方法调用的时候或异常处理的时候。在Spring AOP中,一个连接点总是表示一个方法的执行。

3、通知(Advice):在切面的某个特定的连接点上执行的动作。许多AOP框架(包括Spring)都是以拦截器做通知模型,并维护一个以连接点为中心的拦截器链。

4、切入点(Pointcut):匹配连接点的断言。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行。

5、引入(Introduction):用来给一个类型声明额外的方法或属性。Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。

6、目标对象(TargetObject):被一个或多个切面所通知的对象。这个对象永远是一个被代理的对象。

7、AOP代理(AOP Proxy):AOP框架创建的对象,用来实现切面契约。

8、织入(Weaving):把切面连接到其他应用程序类型或者对象上,并创建一个被通知的对象。

 

其实我对AOP的理解很有限,印象中它就是为其他业务模块服务的一种功能。简单来说就是将前后可以与业务模块分离的部分(例如:日志的记录)分离出来作为单独的方法,再将这些方法统一的配置在配置文件中(都有那些方法需要在执行前记录日志)。

这样做的目的是降低耦合,代码重用率高,代码简洁易维护。试想如果我们的日志方法改变了,现在我们只需要更改一处就可以实现所有目标对象的更改。而原来我们可能需要一个个找到并修改,工作量大不说,还有可能漏掉。这与我们在JAVA中抽出方法的思想一致。AOP就是一种思想。只不过Spring对AOP进行了配置管理,更加方便我们理解使用。

 

最后欢迎大家批评指正!这是我的第一个个人技术博客。

转载请注明原文地址: https://www.6miu.com/read-46039.html

最新回复(0)