2 回答
TA贡献1864条经验 获得超2个赞
IOC控制反转/DI依赖注入
控制反转就是应用本身(Action)不负责依赖对象(Dao)的创建及维护,依赖对象的创建及
维护是由外部容器(BeanFactory)负责的。这样控制权就由应用转移到了外部容器,控制
权的转移就是所谓反转。
依赖注入就是指:在运行期,由外部容器(BeanFactory)动态地将依赖对象(Dao)注入到
组件(Action)中。
1)依赖注入的方式
DI(Dependency injection 依赖注入)是IoC实现的重要技术,有如下2种方式:
a,setter方式注入
b,构造方式注入
2)IoC和DI的关系
IoC全称Inverse of Control(反向控制或控制反转)
Spring是具有IoC特性的框架。
实现IoC是由Spring容器来完成的,Spring容器通过DI建立起对象(组件、Bean)之
间的关系。
可以这样理解:DI是IoC实现的一种手段,IoC的理论通过DI来实现。
DI用来管理对象(组件、Bean),不用你自己一个个new
AOP中的一些概念
a,切面(aspect):跟类很相似,切面就是通知(Advice)的集合
b,目标对象:要使用Advice操作的方法(异常)的对象
c,连接点(Joinpoint):被拦截到的点,点指的是调用某方法或处理某异常
d,切入点(PointCut):匹配一系列连接点的集合的断言(表达式),是一个表达式,
指明处理方法(Advice)将在何时触发。
e,通知(Advice):拦截到JoinPoint之后要做的事(比如logger())
f,前置通知(Before Advice):在某连接点之前的通知(连接点方法执行之前,做的事)
g,后置通知(After returning Advice):某连接点正常完成以后执行的通知
h,最终通知(after finally Advice):最后执行的操作
AOP用来做日志、声明式事物管理等另外:
Aop的实现
1)目标对象如果实现接口:
spring会在底层使用jdk动态代理,spring以jdk动态代理为主(jdk实现的)
2)目标对象如果没有实现任何接口
spring需要依赖第3方
cglib-nodep-2.1_3.jar来实现,使用的是cglib动态代理
TA贡献1866条经验 获得超5个赞
Spring Web MVC 处理Http请求的大致过程:
一旦Http请求到来,DispatcherSevlet将负责将请求分发。DispatcherServlet可以认为是Spring提供的前端控制器,所有的请求都有经过它来统一分发。
在DispatcherServlet将请求分发给Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具体的Controller。HandlerMapping是这样一种对象,它能够完成客户请求到Controller之间的映射。在Struts中,这种映射是通过struts-config.xml文件完成的。其中,Spring为Controller接口提供了若干实现,例如Spring默认使用的BeanNameUrlHandlerMapping。还有,SimpleUrlHandlerMapping,CommonsPathMapHandlerMapping。
Spring Controller将处理来自DispatcherServlet的请求。Spring的Controller类似于struts的Action,能够接受HttpServletRequest和HttpServletResponse。Spring为Controller接口提供了若干实现类,位于org.springframework.web.servlet.mvc包中。由于Controller需要为并发用户处理上述请求,因此实现Controller接口时,必须保证线程安全并且可重用。Controller将处理客户请求,这和Struts Action 扮演的角色是一致的。
一旦Controller处理完客户请求,则返回ModelAndView对象给DispatcherServlet前端控制器。ModelAndView中包含了模型(Model)和视图(View)。从宏观角度考虑,DispatcherServlet是整个Web应用的控制器;从微观角度考虑,Controller是单个Http请求处理过程中的控制器,而ModelAndView是Http请求过程中返回的模型和视图。前端控制器返回的视图可以是视图的逻辑名,或者实现了View接口的对象。View对象能够渲染客户响应结果。其中,ModelAndView中的模型能够供渲染View时使用。借助于Map对象能够存储模型。
如果ModelAndView返回的视图只是逻辑名,则需要借助Spring提供的视图解析器(ViewResoler)在Web应用中查找View对象,从而将响应结果渲染给客户。
DispatcherServlet将View对象渲染出的结果返回个客户。
添加回答
举报