springIOC原理
- IOC(控制反转):依赖倒置原则的一种代码设计思路,将原来在代码里面需要实现的,对象创建,对象之间的依赖,反转给容器来帮忙实现,在启动tomacat时,根据基于注解的方式启动容器的类(启动类)下的包中所有符合规则和条件的类,初始化放在map集合中
- DI机制:在实际开发生产中,类和类之间有很多时候存在依赖关系,一个对象依赖另一个对象,把存在依赖关系的对象实例化的过程称之为:依赖注入
- SpringIOC容器通过xml,注解等其他方式配置类与类之间的依赖关系,完成对象的创建和依赖的管理注入
设计模式:工厂模式 核心:创建,管理,注 入,控制对象,springioc管理对象整体的生命周期
SpringIOC的设计初衷是什么
- 集中管理,实现类的课配置和易管理
- 降低类与类之间的耦合度
- 提升java应用程序的性能,减轻JVM的压力
- 让程序员更专注于业务上,而不是创建管理对象
** 谈谈对SpringIOC的理解和认识
SpringIOC框架是通过java语言开发出的一个框架,在没有spring框架之前,我们要调用类中方法或给属性赋值,都是new对象,spring内部提供IOC机制,他的核心是,把对象创建的过程,交给容器(MAP)来进行管理的一种机制,将传统的创建管理对象的过程更换成交由容器创建管理对象的过程称之为IOC控制反转的过程,通过xml或注解(@Resources()@Autowired)的方式进行注入,管理bean到容器中 ** SpringMVC接收请求中IOC的流程
- 发送一个请求http://localhost8080/xxx/mm
- 经过–SpringMVC中的Servlet DispatcherServlet
- 根据路由在springioc容器中找到/xxx/mm对应映射(requestmapping)–对应的类
- 根据类的名字找到对应ioc对象的实例
- 然后根据映射(requestmappeing)找到执行的方法
springioc容器的bean是单例的吗?
springioc中的单例和单例设计模式不一样, 他们的共同点事:在内存空间中只有一份,思想是一样的 springioc的bean的单例就是一个Map容器,因为这个Map是一个全局的变量。
SpringAOP
在开发中,很多时候,有一些业务逻辑非常通用(接口登录校验),或者开发很多业务会执行处理附属业务(保存日志)等 AOP:当对象执行方法的时候,会对对象执行的方法进行横切面的拦截处理,并对其方法的业务进行织如逻辑增强处理 总结:
- AOP是面向切面编程的一种思想,它是指对象执行方法的时候,对执行的方法执行逻辑增强
- AOP是采用jdk动态代理和cglib动态代理切换拦截处理
- 执行的对象必须是:代理对象,代理对象产生必须使用jdk的动态代理和cglib来产生
- 有了代理对象,使用切面类来进行增强逻辑处理,切面类必须实现InvocationHandler接口,覆盖invoke方法,这个方法就是执行代码增强的方法
好处:
- 降低耦合度
- 使系统容易扩展
- 提高代码的复用性
如何拦截
- jdk动态代理(必须接口)
-
- 在平时的开发中,如果你有IUserService,进行子类的实例化的时候,其实就是使用jdk动态代理,然后通过IOC的DI机制完成注入。默认是jdk动态代理
- cglib动态代理(不需要接口)
-
- 在平时开发中,如果没有接口IUserService,进行子类的实例化的时候,其实就是使用cglib动态代理,然后通过IOC的DI机制完成注入
AOP基本概念
- 连接点:具体执行的方法
- 切入点:所需要拦截方法的集合
- 通知:具体处理业务的位置和时间点,切面类的invoke方法
- 切面:通知和切入点的结合(切面类)
- 织入:把对象对象执行的方法和通知关联的过程,代理对象执行方法,要去通知哪个方法执行增强逻辑
- 代理:AOP代理可以用JDK动态代理或CGLIB代理实现
- 目标对象:具体的:orderServiceImpl
当请求传递发现方法上有注解会将对象变为代理对象,代理对象执行过程中会进入切面类进行逻辑增强处理,在这个过程中会有很多的切点,连接点,给通知使用,通知回合连接点进行关联匹配,在通知里面进行增强处理
|