Spring三大核心思想

spring三大核心思想分别是:控制反转IOC;依赖注入DI;面向切面AOP。接下来我将从是什么(what)、怎么实现(how)、为什么(why)来讲。只是帮助初学者理解,更具体的用法自己学习哦。

先说IOC:

What:全称Inversion of Control,首先得分清楚一点,IOC和MVC思想一样,同样是一种编程思想,而非一种技术。IOC思想我自己认为就是容器思想,IOC就是一个容器。传统的Java开发中,是直接在对象的内部通过new进行对象的创建,是程序主动创建以来对象;然而对Ioc来说,是通过Ioc容器控制对象,由Ioc容器控制外部资源的获取,具体点就是:我在一个类中调用另一个类的方法不像以前那样创建这个类的实例,而是直接从spring创建的这个容器中获取。

How:实现得两种方法一是BeanFactory,二是ApplicationContext

        BeanFactory context= new ClassPathXmlApplicationContext("demo.xml");
        ApplicationContext context= new ClassPathXmlApplicationContext("demo.xml");

Why:为什么要使用IOC的思想?因为为了降低耦合,我们编程一直追求一个低耦合,高内聚的状态,使用IOC思想能降低我们程序的耦合度。

然后是DI:

What:全称Dependency Injection,首先还是那个分清楚一点,依赖注入是上面IOC思想的一种实现方式。这里面就必须重点理解依赖:依赖是一种关系(一个类(a)需要调用另一个类(b)中的方法,其实也可以说是一个类依赖另一个类的方法。就是一种需要的关系。)依赖注入就是我将被依赖的那个类b里面的对象当作值赋给了调用者类a的成员变量。

How:通过在配置xml中的bean,在类中直接调用即可。

Why:为了松耦合,注意哦,不是完全解耦,因为只是将之前复杂的类之间的耦合提取了共用的部分在xml文件中,还是有联系的。不是完全分离的。

最后是AOP:

What:全程Aspect Oriented Programming,也称之为面向切面编程。这次的AOP就是一种技术了。可以说是一种隔离技术,去隔离各个业务模块。AOP中有四个重要的点:切面(Aspect)、切点(PointCut)、连接点(Joint  Point)、增强(advice)。

连接点:可以被增强的方法。

切点:实际上我们选择增强的方法。

增强:实际增强的方法中实际被隔离的逻辑部分(比如说一个流程业务中我们需要写增加、删除、修改、查找的方法:然后这些方法除了核心的逻辑代码,我们发现都还有其他一样的几个逻辑代码,于是我们就把这几个同样部分逻辑代码抽离出去交给一个类或者模块统一处理(代理),这里面每一个逻辑部分我们对它进行的处理就是增强。),主要由五个增强逻辑构成。

切面:切分解剖封装的对象的内部,找出影响多个类的公共行为,并将他们再次封装到一个可重用的模块中去。

How:

1引入aspectjweaver依赖

2在配置的xml文件中的bean中开启包扫描和aspect注解

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/aop
         http://www.springframework.org/schema/aop/spring-aop.xsd">
    <!--开启包扫描-->
    <context:component-scan base-package="com.yxc.aspect"/>
    <!--开启aspectJ注解-->
    <aop:aspectj-autoproxy/>
</beans>

3创建实现方法的类以及代理的类。

需要实现的方法add的类User,偷个懒,其它的方法我就不写了,这里不止这个方法哈。

package com.yy.aspect;

import org.springframework.stereotype.Component;

@Component
public class User {
    public void addUser(){
        System.out.println("成功添加一个用户");
    }
}

代理类,这下面的每一个通知就是上面所说的逻辑部分,这些都从上面的User类中的所有方法提取出来的公共的部分。

package com.yxc.aspect;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class CommonAspect {
    //前置通知
    @Before(value = "execution(* com.yxc.aspect.User.addUser(..))")
    public void before(){
        System.out.println("前置通知");
    }
    //后置通知(返回结果之后执行)
    @AfterReturning(value = "execution(* com.yxc.aspect.User.addUser(..))")
    public void afterReturning(){
        System.out.println("AfterReturning...");
    }
    //最终通知(不管有没有发生异常)
    @After(value = "execution(* com.yxc.aspect.User.addUser(..))")
    public void after(){
        System.out.println("最终通知");
    }
}

我相信到了现在应该能理解了吧。

Why:为了将核心关注点与横切关注点分离而使业务逻辑各部分之间的耦合度降低,并且提高程序的可重用性。(横切关注点指的是与核心业务流程关联度不大的流程,类似于权限管理、日志等。核心关注点指的是核心业务处理流程,属于不可分割、尽量减少改动的部分)

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值