ioc 与 di

IOC(Inversion of control)简单来说就是将对象object 的创建的权利及对象的生命周期的管理过程交由spring框架来处理。从此再开发过程中不需要关注对象的创建和生命周期的管理,而是在需要的时候由spring框架提供,这个由spring框架管理对象创建和生命周期的机制称之为控制反转

DI(Dependency Injection)依赖注入,在创建对象的过程中spring可以依据对象的关系,自动把其他对象注入(无需创建对象,直接拿着使用)

总结 spring核心就干了两件事

1.创建对象    2.设置对象的关联关系

IOC 控制反转:就是将对象的创建,对象的存储(map)对象的管理(依赖查找,依赖注入)交给spring容器。由它管理对象的生命周期   ..底层原理就是bean标签管理的对象的生命周期..

DI 依赖注入:相对于IOC而言,依赖注入更加准确地描述了IOC的设计理念,所谓依赖注入,即组件之间的依赖关系由容器在应用系统运行期来决定,也就是由容器动态的将某种依赖关系的目标对象实例注入到应用系统中的各个关联的组件之中。

小结:之间我们自己new出新类,变成由一个初始化的xml配置文件来创建,也就是spring容器来创建遍历xml配置文件,读取到<bean>获取到class属性类的全路径,利用反射创建这个类。..在java范畴中万物皆object,在spring中万物皆bean。 bean是spring的核心,基础.根源。

...............................................................

applicationcontext.xml--->文件

    这是spring的核心配置文件,配置的信息可以很多。

   IOC功能:通过xml的配置,把自己写的类交给spring管理,作为spring容器里的一个bean存在,本质上是一个map{hello,new Hello()}, id 是每个bean的唯一标志,class是class的全路径。              <bean id="Hello"   class="cn.tedu...”></bean>                 

 -->包扫描,用注释的方式,配置bean会扫描指定包下,带@Component注解的类,并注spring容器中,key是类名小写,value是类的对象  <context:component-scan base-package="cn.tedu"/>          <context : component-scan>          通过id获取bean,beanname就是类名,首字母小写   1.创建类,类上使用IOC的注解。2.创建配置文件,指定包扫描的路径。3.直接getBean(类名首字母变成小写)..IOC的注解包括@component,@service,@controller,..DI注解 @Autowired..      

..................................................................

Spring核心特征中除了IoC控制反转、DI依赖注入,还有一个核心就是强大的面向切面编程AOP(Aspect Oriented Programming)的实现。

spring AOP三要素:                                                                                                                 1.Aspect 定义切面;2.通过通知(advice)来指定具体做什么事,如方法执行前做什么,方式执行后做什么,抛出异常做什么,从而实现方法的增强。3.具体通过切点(point cut)配置切点表达式(expression)来指定在哪些方法上织入(ware)横切逻辑  被切的地方叫连接点(Join Point)

spring框架实现了AOP面向切面,其引入了第三方Aspect框架来具体实现,Aspect提供了五种切入方式,术语称为 通知advice  具体五种:1.前置通知before 2.后置通知after 3.环绕通知around 4.返回后通知after Returning 5.异常通知afterThrowing。

使用AOP的步骤:1.加入jar包 spring-boot-starter-aop 2.创建切面,提供通知和切点  3.测试             @Aspect 切面:由切点和通知组成    切点表达式:通过execution属性声明                                     @Pointcut  定义了方法的触发时间,切入点表达式。  

更多推荐

spring框架两大核心