Spring----浅谈IoC/DI&&AOP


前言

本文为初学者学习该方面知识的总结,并无什么高深技术或是鲜为人知的知识点,仅是个人小总结,请知晓此些后服用。


一、谈谈IoC

1.1 Ioc是什么?

  • Ioc–Inversion of Control(控制反转),目的是要降低代码的耦合度,指导我们如何设计出松耦合,更优良的程序。

  • 这种思想教我们在使用对象时,在程序中不要主动使用new来产生对象,转换由外部提供对象。

  • 将对象的创建控制权由程序转移到外部,获取依赖对象由主动行为变为了被动行为,控制权颠倒过来了,这种控制权的转移叫做控制反转。

1.2 实现方式(DI)

Spring提供了一个容器,称为IoC容器。用来充当IoC思想中的“外部”。变成由IoC容器提供对象。

IoC容器作用:管理对象的创建以及初始化的过程。

这个时候就有个新概念提出来——Bean。

Bean: 在IoC容器中,被创建和管理的对象称为Bean。

然而在程序中,Service类需要依赖Dao类才能正常运行。这个时候IoC容器会自动将二者的依赖绑定上就可以了。这种思想叫做 DI。

DI(依赖注入): 建立Bean和Bean之间依赖关系的整个过程,至于对象如何被创建,查找,赋值都是由容器来实现的。

最终效果是使用对象时不仅可以直接从IoC容器里直接获取,并且获取到的Bean已经绑定了所有的依赖关系。

1.3 代码演示

  • IoC: 先在applicationContext.xml文件中配置Dao和Service的Bean
  • DI: 在Service中将Dao的信息进行配置进去
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
        id属性该路径下Bean的唯一名字
        class属性路径-->
    <bean id="bookDao" name="dao" class="com.dao.impl.BookDaoImpl" />
    <bean id="bookService" name="service service2" class="com.service.impl.BookServiceImpl" >
        <!--property标签表示配置当前bean的属性
        name属性表示配置哪一个具体的属性
        ref属性表示参照哪一个bean-->
      <property name="bookDao" ref="bookDao"/>
</bean>
</beans>



倘若觉得这种手写的方式太麻烦,Spring中也可以选择自动装配

<bean id="bookDao" name="dao" class="com.dao.impl.BookDaoImpl" />
<bean id="bookService" name="service" class="com.service.impl.BookServiceImpl" autowire="byType"/>

学到后面,还可以抛弃.xml的方式,直接用注解的方式来进行装配,详细的使用方式请读者另寻他路吧。
可是不得不说,注解真的香啊。

@Autowired
private BookDao bookDao;

二、说说AOP

2.1 AOP是什么?

  • AOP–Aspect Oriented Programming(面向切面编程),是一种编程范式,指导开发者如何编程结构。 是OOP的延续,也是Spring框架中的一个重要内容,是函数式编程的一种衍生泛型。
  • 简单的说他就是把我们程序重复的代码抽取出来,在需要执行的时候使用动态代理技术在不修改源码的基础上,对我们的已有方法进行增强。
  • 作用:不惊动原本设计的基础上进行功能增强

2.2 AOP核心概念

  • Joint point(连接点):连接点可以是程序执行过程中的任意位置,在SpringAOP中,可以理解为方法的执行,简单来点说就是所有的方法
  • Aspect(切面):描述通知和切入点的对应关系
  • Pointcut(切入点):匹配连接点的式子,就是选中要加强的方法。在SpringAOP中,一个切入点可以只描述一个具体的方法,也可以匹配多个方法
  • Advice通知:在切入点处执行的操作,要增强的功能,也就是共性功能。
  • Target(目标对象):代理的目标对象。
  • Proxy(代理):一个类被 AOP 织入增强后,就产生一个结果代理类。
  • 通知类:定义通知的类。

2.3 Aop通知类型

  • 前置通知:**@Before(value = “”)**在方法执行前通知
  • 后置通知:**@After(value = “”)**在方法执行后通知
  • 环绕通知(重点):**@Around(value = “”)**在方法执行前后均可通知,可有访问到方法的返回值
  • 返回后通知:**@AfterReturning(value = “”)**在方法正常执行完成进行通知,可以访问到方法的返回值的。
  • 抛出异常后通知:**@AfterThrowing(value = “”)**在方法出现异常时进行通知,可以访问到异常对象,且可以指定在出现特定异常时在执行通知。

提示:@After和@AfterReturning区别为@After不论方法是否执行正常结束都会通知,而@AfterReturning出现异常未正常结束则不会通知。


总结

Spring学习是SSM框架的开端,又是被卷到的一天啊。
好好学习的小伙子
以上


版权声明:本文为qq_59123638原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。