Posted
: January 20, 2000
Status
:
Completed
Tags
:
Categories
:
Spring框架是由于软件开发的复杂性而创建的,Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事。从简单性、可测性和松耦合性角度而言,绝大部分Java应用都可以用Spring。
大约分为20个模块。
优点:
缺点:
负责创建对象、管理对象(通过依赖注入)、整合对象、配置对象以及管理这些对象的生命周期。
依赖注入是Spring实现IoC的一种重要手段,将对象间的依赖关系的控制权从开发人员手里转移到容器。
1.构造器注入
2.setter注入
3.接口注入(我们几乎不用)
优点:
缺点:
1.Spring 对bean进行实例化。
2.Spring将值和bean的引用注入到 bean对应的属性中。
3.如果bean实现了BeanNameAware接口,Spring将bean的ID传递给setBeanName()方法。
4.如果bean实现了BeanFactoryAware接口, Spring将调用setBeanFactory()方法,将 bean所在的应用引用传入进来。
5.如果bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()方法,将bean所在的应用引用传入进来。
6.如果bean实现了BeanPostProcessor 接口,Spring将调用他们的post-ProcessBeforeInitalization()方法。
7.如果bean实现了InitializingBean接口,Spring将调用他们的after-PropertiesSet()方法,类似地,如果bean使用init-method声明了初始化方法,该方法也会被调用。
8.如果bean实现了BeanPostProcessor接口,Spring将调用它们的post-ProcessAfterInitialization()方法。
9.此时, bean已经准备就绪,可以被应用程序使用了,他们将一直驻留在应用上下文中,直到该应用被销毁。
10.如果bean实现了DisposableBean接口,Spring将调用它的destory()接口方法,同样,如果bean使用destroy-method声明了销毁方法,该方法也会被调用。
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。
前置通知(Before): 目标方法被调用之前调用通知功能。
后置通知(After): 目标方法完成之后调用通。
返回通知(After-returning): 目标方法成功执行之后调用通知。
异常通知(After-throwing): 目标方法抛出异常后调用通知。
环绕通知(Around): 在被通知的方法调用之前和调用之后执行自定义的行为。
连接点是在应用执行过程中能够插入切面的一个点。这个点可以是调用方法时、抛出异常时、甚至修改一个字段时。
切点的定义会匹配通知所要织入的一个或多个连接点。我们通常使用明确的类和方法名称,或是利用正则表达式定义所匹配的类和方法名称来指定这些切点。有些AOP框架允许我们创建动态的切点,可以根据运行时的决策(比如方法的参数值)来决定是否应用通知。
切面是通知和切点的结合。通知和切点共同定义了切面的全部内容。
织入是把切面应用到目标对象并创建新的代理对象的过程。切面在指定的连接点被织入到目标对象中。
引入允许我们向现有的类添加新方法或属性。
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
SpringMVC是Spring框架的一个模块。是一个基于MVC的框架。
DispatcherServlet
DispatcherServlet : 前端控制器,也叫中央控制器。相关组件都是它来调度。
HandlerMapping : 处理器映射器,根据URL路径映射到不同的Handler。
HandlerAdapter : 处理器适配器,按照HandlerAdapter的规则去执行Handler。
Handler : 处理器,由我们自己根据业务开发。
ViewResolver : 视图解析器,把逻辑视图解析成具体的视图。
View : 一个接口,它的实现支持不同的视图类型(freeMaker,JSP等)
1.用户请求旅程的第一站是DispatcherServlet。
2.收到请求后,DispatcherServlet调用HandlerMapping,获取对应的Handler。
3.如果有拦截器一并返回。
4.拿到Handler后,找到HandlerAdapter,通过它来访问Handler,并执行处理器。
5.执行Handler的逻辑。
6.Handler会返回一个ModelAndView对象给DispatcherServlet。
7.将获得到的ModelAndView对象返回给DispatcherServlet。
8.请求ViewResolver解析视图,根据逻辑视图名解析成真正的View。
9.返回View给DispatcherServlet。
10.DispatcherServlet对View进行渲染视图。
11.DispatcherServlet响应用户。
1.具有Spring的特性。
2.可以支持多种视图(jsp,freemaker)等。
3.配置方便。
4.非侵入。
5.分层更清晰,利于团队开发的代码维护,以及可读性好。
Tips:Jsp目前很少有人用了。
不是。具体线程问题需要开发人员来处理。
组件扫描(component scanning):Spring会自动发现应用上下文中所创建的bean。
自动装配(autowiring):Spring自动满足bean之间的依赖。
no - 默认设置,表示没有自动装配。
byName : 根据名称装配。
byType : 根据类型装配。
constructor : 把与Bean的构造器入参具有相同类型的其他Bean自动装配到Bean构造器的对应入参中。
autodetect :先尝试constructor装配,失败再尝试byType方式。
default:由上级标签
Dao 层实现类注解,扫描注册 bean。
讲常量、配置中的变量值、等注入到变量中。
定义控制器类。
@Aspect
@RequestMapping
作用是将返回对象通过适当的转换器转成置顶格式,写进response的body区。通常用来返回json、xml等。
@RestController
@PathVariable
用来标记缓存查询。
@CacheEvict
泛指组件,不好归类时,可以用它。
当创建多个相同类型的 bean 时,并且想要用一个属性只为它们其中的一个进行装配,在这种情况下,你可以使用 @Qualifier 注释和 @Autowired 注释通过指定哪一个真正的 bean 将会被装配来消除混乱。
@Transaction
声明式:声明式事务也有两种实现方式。
编码式:提供编码的形式管理和维护事务。
事务在嵌套方法调用中如何传递,具体如何传播,取决于事务传播行为。
参考:
Be the first one to comment on this page!