• Spring基础知识汇总


    Spring优点:

    低侵入式设计,代码的污染极低;

    独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺;

    Spring的IoC容器降低了业务对象替换的复杂性,提高了组件之间的解耦

    Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用;

    Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问;

    pring的高度开放性,并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部。

    Spring框架的组成结构图:

    Spring的核心机制

    管理Bean

    程序主要是通过Spring容器来访问容器中的Bean,ApplicationContext是Spring容器最常用的接口,该接口有如下两个实现类:

    ClassPathXmlApplicationContext: 从类加载路径下搜索配置文件,并根据配置文件来创建Spring容器;

    FileSystemXmlApplicationContext: 从文件系统的相对路径或绝对路径下去搜索配置文件,并根据配置文件来创建Spring容器

    public class Bean Test{
        public static void main(String args) throws Exception{    
         ApplicationContext ctx =newClassPathXmlApplicationContext("beans.xml"); Person p = ctx.getBean("person", Person.class); p.say; } }

    依赖注入

    Spring框架的核心功能有两个:

    1、Spring容器作为超级大工厂,负责创建、管理所有的Java对象,这些Java对象被称为Bean; 

    2、Spring容器管理容器中Bean之间的依赖关系,Spring使用一种被称为“依赖注入”的方式来管理Bean之间的依赖关系。

    使用依赖注入,不仅可以为Bean注入普通的属性值,还可以注入其他Bean的引用。依赖注入是一种优秀的解耦方式,其可以让Bean以配置文件组织在一起,而不是以硬编码的方式耦合在一起。

    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时,该作用域才真正有效;

    对于一次HTTP会话,session作用域的Bean将只生成一个实例,这意味着,在同一次HTTP会话内,程序每次请求该Bean,得到的总是同一个实例。只有在Web应用中使用Spring时,该作用域才真正有效;

    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配置文件中做如下配置,指定自动扫描的包

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

    使用@Resource配置依赖

    @Resource位于javax.annotation包下,是来自JavaEE规范的一个Annotation,Spring直接借鉴了该Annotation,通过使用该Annotation为目标Bean指定协作者Bean。使用@Resource与< property…/ >元素的ref属性有相同的效果。@Resource不仅可以修饰setter方法,也可以直接修饰实例变量,如果使用@Resource修饰实例变量将会更加简单,此时Spring将会直接使用JavaEE规范的Field注入,此时连setter方法都可以不要。

    使用@PostConstruct和@PreDestroy定制生命周期行为

    @PostConstruct和@PreDestroy同样位于javax.annotation包下,也是来自JavaEE规范的两个Annotation,Spring直接借鉴了它们,用于定制Spring容器中Bean的生命周期行为。它们都用于修饰方法,无须任何属性。其中前者修饰的方法时Bean的初始化方法;而后者修饰的方法时Bean销毁之前的方法。

    Spring4.0增强的自动装配和精确装配

    Spring提供了@Autowired注解来指定自动装配,@Autowired可以修饰setter方法、普通方法、实例变量和构造器等。当使用@Autowired标注setter方法时,默认采用byType自动装配策略。在这种策略下,符合自动装配类型的候选Bean实例常常有多个,这个时候就可能引起异常,为了实现精确的自动装配,Spring提供了@Qualifier注解,通过使用@Qualifier,允许根据Bean的id来执行自动装配。

     

    Spring的AOP

    为什么需要AOP?

    AOP(Aspect Orient Programming)也就是面向切面编程,作为面向对象编程的一种补充,已经成为一种比较成熟的编程方式。其实AOP问世的时间并不太长,AOP和OOP互为补充,面向切面编程将程序运行过程分解成各个切面。 

    AOP专门用于处理系统中分布于各个模块(不同方法)中的交叉关注点的问题,在JavaEE应用中,常常通过AOP来处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等,AOP已经成为一种非常常用的解决方案。

    使用AspectJ实现AOP

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

    AOP实现可分为两类

    1.静态AOP实现: AOP框架在编译阶段对程序进行修改,即实现对目标类的增强,生成静态的AOP代理类,以AspectJ为代表

    2.动态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

  • 相关阅读:
    pytorch固定部分参数
    Norm比较
    Pytorch的tensor数据类型
    Batchnorm原理详解
    深入Pytorch微分传参
    Ubuntu server16.04安装配置驱动418.87、cuda10.1、cudnn7.6.4.38、anaconda、pytorch超详细解决
    Matplotlib绘图及动画总结
    Pytorch创建模型的多种方法
    python常用代码
    VS 2017 + OpenCV + Spinnaker SDK(PointGrey) 配置
  • 原文地址:https://www.cnblogs.com/ZRJ-boke/p/6099383.html
Copyright © 2020-2023  润新知