spring知识点概述
什么是spring?Spring是一个从实际项目开发经验中抽取的,可高度重用的应用框架。Spring是一个轻量级容器,它所带的包装器使许多不同的服务和框架更易于使用。轻量级容器接受任何JavaBean,而不是只接受特定类型的组件。spring框架结构组成spring框架各个模块介绍
什么是spring?
spring框架结构组成
spring框架各个模块介绍
Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
Spring Web :Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
Spring MVC : MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
spring的实现
5,组件的初始化和管理均由Spring完成 ,
两种spring容器类型:
2. ApplicationContext应用上下文:(org.springframework.context.ApplicationContext)基于BeanFactory之上构建,并提供面向应用的服务。
spring的核心:控制反转 (IOC)和面向切面(AOP)
IOC提炼
优点:把应用的代码量降到最低。容器测试,最小的代价和最小的侵入性使松散耦合得以实现。IOC容器支持加载服务时的饿汉式初始化和懒加载。
DI依赖注入是IOC的一个方面,是个通常的概念,它有多种解释。这概念是说你不用床架对象,而只需要描述它如何被创建。你不在代码里直接组装你的组件和服务,但是要在配置文件里描述组件需要哪些服务,之后一个IOC容器辅助把他们组装起来。
IOC的注入方式:1. 构造器依赖注入;2. Setter方法注入。
AOP提炼
连接点(Joinpoint):程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。在Spring AOP中,一个连接点总是表示一个方法的执行。
通知(advice):在切面的某个特定的连接点上执行的动作。其中包括了“around”、“before”和“after”等不同类型的通知。
切入点(Pointcut):匹配连接点的断言。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行(例如,当执行某个特定名称的方法时)。切入点表达式如何和连接点匹配,是AOP的核心。
目标对象(Target Object): 被一个或者多个切面所通知的对象。也被称做被通知(advised)对象。
Bean的生命周期
1,创建Bean的实例(factory-method, autowireConstrutor)2),属性注入(autowireByName, autowireByType)
3,初始化Bean
private void invokeAwareMethods(final String beanName, final Object bean){
if(bean instanceof Aware)
{
if(bean instanceof BeanNameAware){
((BeanNameAware) bean).setBeanName(beanName);
}
if(bean instanceof BeanClassLoaderAware){
((BeanClassLoaderAware) bean).setBeanClassLoader(getBeanClassLoader());
}
if(bean instanceof BeanFactoryAware){
((BeanFactoryAware) bean).setBeanFactory(AbstactAutowire CapableBeanFactory.this);
}
}
}
b,处理器的应用(BeanPostProcessor接口):调用客户自定义初始化方法前以及调用自定义初始化方法后分别会调用BeanPostProcessor的postProcessBeforeInitialization和postProcessAfterInitialization方法,使用户可以根据自己的业务需求进行响应的处理。 c, 激活自定义的init方法(init-method & 自定义实现InitializingBean接口)
protected Object initializeBean(final String beanName, final Object bean, RootBeanDefinetion mbd){
if(System.getSecurityManager() != null){
AccessController.doPrivileged(new PrivilegedAction<Object>(){
@Override
public Object run()
{
invokeAwareMethods(beanName,bean);
return null;
}
});
}
else{
invokeAwareMethods(beanName,bean);
}
Object wrappedBean = bean;
if(mbd == null !! !mbd.isSynthetic()){
wrappedBean = applyBeanPostProcessorsBeforeInitialization(wappedBean,beanName);
}
try{
invokeInitMethods(beanName, wappedBean, mbd);
}
catch(Throwable ex){
throw new BeanCreationException((mbd != null ? mbd.getResourceDescription():null),beanName,"Invocation of init method failed",ex);
}
if(mbd == null || !mbd.isSynthetic()){
wrappedBean = applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);
}
return wappedBean;
}
d,使用Bean。 驻留在应用的上下文中,直到该应用上下文被销毁。 e,销毁(destory-mthod & 实现DisposableBean接口)
springMVC工作流程
1. | 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获 |
2. | DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回 |
3. | DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法) |
4. | 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作: HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息 数据转换:对请求消息进行数据转换。如String转换成Integer、Double等 数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等 数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中 |
5. | Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象 |
6. | 根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet |
7. | ViewResolver 结合Model和View,来渲染视图,并将渲染结果返回给客户端 |
spring之Bean的生命周期:
http://blog.csdn.net/weixin_36380516/article/details/72354668
3,spring框架中Bean的基本属性及调用外部properties等配置文件的方法介绍:
http://blog.csdn.net/weixin_36380516/article/details/72426357更多推荐
所有评论(0)