zoukankan      html  css  js  c++  java
  • spring的基本认识

    spring的核心机制:
    管理bean
    程序主要是通过spring容器来访问容器中的bean,ApplicationContext是spring容器最常用的接口,该接口有如下两个实现类:
    ClassPathXmlApplicationContaxt:从类加载路径下搜索配置文件,并根据配置文件来创建spring容器。
    FileSystemXmlApplicationContext:从文件系统的相对路径下去搜索配置文件,并根据配置文件来创建spring容器。

    1 public class BeanTest{
    2     public static void main(String args[])throws exception{
    3     ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
    4     HelloService h=ctx.getBean("helloService",HelloService.class);
    5     h.sayHello();
    6     }
    7 }

    依赖注入
    Spring框架的核心功能有两个:
    1.Spring容器作为超级大工厂,负责创建,管理所有的java对象,这些对象称为Bean.
    2.Spring容器管理容器中Bean之间的依赖关系,Spring使用一种被称为"依赖注入"的方式来管理Bean之间的依赖关系。

    不管是依赖注入,还是控制反转,其含义完全相同。当某个Java对象(调用者)需要调用另一个Java对象(被依赖对象)的方法时,在传统模式下通常有两种做法:

    原始做法: 1.调用者主动创建被依赖对象,然后再调用被依赖对象的方法。
    2.简单工厂模式: 调用者先找到被依赖对象的工厂,然后主动通过工厂去获取被依赖对象,最后再调用被依赖对象的方法。

    设值注入
    设值注入是指IoC容器通过成员变量的setter方法来注入被依赖对象。这种注入方式简单、直观,因而在Spring的依赖注入里大量使用。

    构造注入
    利用构造器来设置依赖关系的方式,被称为构造注入。通俗来说,就是驱动Spring在底层以反射方式执行带指定参数的构造器,当执行带参数的构造器时,就可利用构造器参数对成员变量执行初始化——这就是构造注入的本质。

    Spring容器中的Bean
    对于开发者来说,开发者使用Spring框架主要是做两件事:①开发Bean;②配置Bean。对于Spring框架来说,它要做的就是根据配置文件来创建Bean实例,并调用Bean实例的方法完成"依赖注入"——这就是所谓IoC的本质。

    容器中Bean的作用域
    当通过Spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域。Spring支持如下五种作用域:

    singleton: 单例模式,在整个Spring IoC容器中,singleton作用域的Bean将只生成一个实例。
    prototype: 每次通过容器的getBean()方法获取prototype作用域的Bean时,都将产生一个新的Bean实例。
    request: 对于一次HTTP请求,request作用域的Bean将只生成一个实例,这意味着,在同一次HTTP请求内,程序每次请求该Bean,得到的总是同一个实例。只有在Web应用中使用Spring时,该作用域才真正有效。
    session:该作用域将 bean 的定义限制为 HTTP 会话。 只在web-aware Spring ApplicationContext的上下文中有效。
    global session: 每个全局的HTTP Session对应一个Bean实例。在典型的情况下,仅在使用portlet context的时候有效,同样只在Web应用中有效。
    如果不指定Bean的作用域,Spring默认使用singleton作用域。prototype作用域的Bean的创建、销毁代价比较大。而singleton作用域的Bean实例一旦创建成果,就可以重复使用。因此,应该尽量避免将Bean设置成prototype作用域。

    Spring的"零配置"支持
    搜索Bean类
    Spring提供如下几个Annotation来标注Spring Bean:

    @Component: 标注一个普通的Spring Bean类
    @Controller: 标注一个控制器组件类
    @Service: 标注一个业务逻辑组件类
    @Repository: 标注一个DAO组件类
    在Spring配置文件中做如下配置,指定自动扫描的包:

    1 <context:component-scan base-package="edu.shu.spring.domain"/>

    Spring的AOP

    使用AspectJ实现AOP
    AspectJ是一个基于Java语言的AOP框架,提供了强大的AOP功能,其他很多AOP框架都借鉴或采纳其中的一些思想。其主要包括两个部分:一个部分定义了如何表达、定义AOP编程中的语法规范,通过这套语法规范,可以方便地用AOP来解决Java语言中存在的交叉关注点的问题;另一个部分是工具部分,包括编译、调试工具等。

    AOP实现可分为两类:

    静态AOP实现: AOP框架在编译阶段对程序进行修改,即实现对目标类的增强,生成静态的AOP代理类,以AspectJ为代表。
    动态AOP实现: AOP框架在运行阶段动态生成AOP代理,以实现对目标对象的增强,以Spring AOP为代表。
    一般来说,静态AOP实现具有较好的性能,但需要使用特殊的编译器。动态AOP实现是纯Java实现,因此无须特殊的编译器,但是通常性能略差。

    AOP的基本概念
    关于面向切面编程的一些术语:

    切面(Aspect): 切面用于组织多个Advice,Advice放在切面中定义。
    连接点(Joinpoint): 程序执行过程中明确的点,如方法的调用,或者异常的抛出。在Spring AOP中,连接点总是方法的调用。
    增强处理(Advice): AOP框架在特定的切入点执行的增强处理。处理有"around"、"before"和"after"等类型
    切入点(Pointcut): 可以插入增强处理的连接点。简而言之,当某个连接点满足指定要求时,该连接点将被添加增强处理,该连接点也就变成了切入点。
    Spring的AOP支持
    Spring中的AOP代理由Spring的IoC容器负责生成、管理,其依赖关系也由IoC容器负责管理。
    为了在应用中使用@AspectJ支持,Spring需要添加三个库:

    aspectjweaver.jar
    aspectjrt.jar
    aopalliance.jar
    并在Spring配置文件中做如下配置:

    1 <!--启动@AspectJ支持-->
    2 <aop:aspectj-autoproxy/>
    3 
    4 <!--指定自动搜索Bean组件、自动搜索切面类-->
    5 <context:component-scan base-package="edu.shu.sprint.service">
    6     <context:include-filter type="annotation" expression="org.aspectj.lang.annotation.Aspect"/>
    7 </context:component-scan>

    几个常用注解
    @RestController标明此Controller提供RESTful API
    @RequestMapping 及其变(@GetMapping,PostMapping等),映射http请求到java方法
    @RequestParam映射请求参数到java方法的参数
    @PathVariable映射URL片段到java方法的参数
    @PageableDefault指定默认分页参数
    @JsonView按照指定方式序列化java对象
    @EnableAsync开启异步任务注解

    参考:http://codepub.cn/2015/06/21/Basic-knowledge-summary-of-Spring/

  • 相关阅读:
    (转) qt: usb热插拔(linux);
    Qt: usb热插拔检测(windows);
    C++: 模板函数定义与声明分离;
    bootstrap: 内联表单;
    thinkphp5: 循环输出表格,并固定表格单元宽度(过长省略号)
    响应式菜单栏: bootstrap + jQuery
    Qt: 数据库操作;
    qt: 获取sql数据表的所有的字段;
    Qt: 非阻塞时间延迟;
    egg中使用jwt
  • 原文地址:https://www.cnblogs.com/liva-/p/11305254.html
Copyright © 2011-2022 走看看