前言
本文为初学者学习该方面知识的总结,并无什么高深技术或是鲜为人知的知识点,仅是个人小总结,请知晓此些后服用。
一、谈谈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版权协议,转载请附上原文出处链接和本声明。