• spring 基础学习笔记


    spring 初始理解

    1、spring 只是一个框架,是一些相应的 jar包,相当于一个项目的管理者,各种其他框架的中介,项目的监管机构。

    2、主要特点是依赖注入DI、面向切面AOP控制反转IOC

    3、核心:加载applicationContextXml配置文件,生成applicationContext对象,在配置文件中的bean也会生成各种bean对象,这些bean对象相当于配置文件中的各个类的初始化,或者框架配置, spring通过applicationContext这个对象去管理这些别的框架或者类放在配置文件中让spring代理的bean对象。

    4、Spring创建这些bean对象方法有两种,xml里配置方式,和注解方式(直接在类上加注解@component或者@repository;spring会将这些生成的bean对象自动注入到相应的位置。

    5、Spring启动是在webXml中,需要在web.xml中配置加上applicationContext配置文件。

     

     

    Spring体系结构

    Spring是模块化的。

     

    主要模块有 核心模块,中间件,web,数据管理四个大类:

    核心模块:

    Corespring的核心中的核心模块;提供依赖注入和控制反转ioc的基本实现方法。

    BeanbeanFactory工厂模式,设计模式中的工厂模式,生产各种bean对象的工厂。

    Context:上下文管理模块: corebean模块的基础上,管理bean的各种实现和注入等。

    Spel:表达式语言模块:一种spring特有的表达式语言,注解是在这里面管理?

    中间件:

    AOP:提供面向切面编程实现。

    Aspects:强大的面向切面变成集成框架。

    测试模块:提供单元测试,Junit模块。

    MessagingwebService服务的支持。

     

    WEB

    Web:面向web的基本功能模块。

    Web_MVC:模块提供模型—视图—控制器分层模式的支持。面向web分层应用。

    Web-socket:提供客户端和服务端信息传输的支持。

    Web-portlet:提供在portlet环境下实现MVC,提供了selvet的基本功能。

     

    数据管理模块:

    Jdbc:提供对jdbc的支持。

    ORM:对流行的关系映射提供支持。

    OXM:提供对对象及其实现的抽象。

    事务模块:提供了声明式事务的实现。

     

     

    Spring实践学习

    1、在spring的配置文件中可以对类中的属性进行赋值。

     

     

    2、通过classPathXmlApplicationContext类初始化spring的配置文件,生成一个applicationContext对象,在这个过程中,spring会自动解析配置文件,并将里面的配置的类生成spring特有的bean对象。通过applicationContextgetBean方法,方法的参数为配置的类的唯一id,返回一个springBean对象,通过强制转换生成相应类的对象。

     

    3、spring配置文件中bean的定义:

     

     

    Bean的配置属性有:

    1Class:指定当前bean的类

    Name/id:用于标识当前bean对象的唯一性标识。之后可以直接通过id调用这个bean对象。

    2Scope:使用单例singleton或者多例模式prototype产生类对象实例。

     

     

     

    3Constructor-arg

    4Properties

    5autoWining mode:

    6Lazy-initialization mode:

    7Initialization:

    8Destruction:

     

     

     

    Bean基础

    Bean的作用域:

    通过scope属性配置bean的作用域:

    属性值有:singleton:单例模式,第一次使用时创建后之后都不再创建。

    Prototype:多例模式,每次使用都创建一个新的javabean对象。

    Request:限制为HTTP请求。只在 web-aware Spring ApplicationContext 的上下文中有效。

    Sesson:该作用域将 bean 的定义限制为 HTTP 会话。 只在web-aware Spring ApplicationContext的上下文中有效。

    global-session:该作用域将 bean 的定义限制为全局 HTTP 会话。只在 web-aware Spring ApplicationContext 的上下文中有效。

     

     

    Bean的生命周期:

    在第一次使用初始化的时候创建,在初始化之前调用init方法,在销毁之前自动调用destory方法。程序运行完的时候进行销毁。

    Bean的继承:

    spring配置文件中,可以定义bean的继承关系,使用parent属性指定当前bean的父类。

    子类bean会自动获得父类bean给属性注入的值。

    依赖注入:

     

    1、通过构造函数来向类中的属性注入值。

     

     

     

    如果类中有多个类对象需要注入。则在bean配置中,按照类变量出现的先后顺序,配置<constructor-arg>

    如果注入的类型不是对象。直接用value属性赋值;

    Index为变量在类中出现的顺序索引。也可以使用变量类型

     

     

     

    2、基于gettersetter函数对类中属性进行赋值

    为变量创建gettersetter方法后。在spring配置文件中,可以直接通过属性名 value进行赋值,ref为另一个类的id

     

     

     

    3、通过内部bean对类变量进行赋值

     

     

    4、向集合变量注入值。

     

     

     

    在基础类型集合中,使用《property,其中name属性指定变量的名称。

     

     

    在类集合中,使用ref设置集合的值。

    5、注入特殊值

     

     

     

    自动装配 autowire

    byName:根据名称自动装配

    当自动装配设置为byname时,spring会根据类中的属性名称去匹配与当前属性名称相同的bean。然后自动将相应的bean对象赋值给相对应的属性。

    byType:根据类型自动装配

    当自动装配设置为bytype的时候,spring会根据类中属性的类型,去spring配置文件的beans中自动匹配与当前类型相同的bean,然后自动初始化对象赋值给这个类属性。

    构造函数自动装配

    当自动装配设置为constructor时,在相应类中,必须应该在构造函数中对类变量进行赋值,

    Spring注解

    @required注解:

    只加在setter方法上,当在setter方法上的时候,表示必须在spring配置文件中对这个属性进行注入,否则会报错。

    @autowrited注解:

    可以加在变量、setter方法、构造函数上,相当于在spring配置文件中设置自动装配。

    加在变量上、可以不用写这个变量setter方法。使用bytype方式

    加在setter方法上。相当于对这个属性进行byType自动装配。

    加在构造方法上、相当于对这个属性进行构造方法自动装配。

    @autoWrited(required=false)

    默认情况下,autowrited自动实现required的作用,即加了autowrited注释,必须在属性应该有一个默认值。如果自动装配能够获得bean对象则相当于有一个默认值,但是对于基础类型变量。加了@autowrited注释后必须在spring配置文件中给变量赋值。否则会报错。

    加了required=false后,可以不用给变量定义初始值。也不会报错。

    @qualifier注解:

    当在spring配置文件中,相同的类有多个注入的时候,为了在注入的时候区分类中的变量使用spring配置文件中的哪一个注入,需要添加这个@qualifier注释。

    用法就是@qualifier(“自定义的名称”)  ***这里的自定义名称应该和spring配置文件中的对应的类的id相同。

    @PostConstruct @PreDestroy 注解:

    这两个注释都是加在方法上。

    @postCOnstruct注释相当于在配置文件中定义init-method方法

    @preDestroy注释相当于在配置文件中定义destroy-method方法。

    这两个方法分别在类初始化之前和销毁之前执行,必然执行。

    @resource注解

    可以加在变量或者方法上。相当于通过byname方式自动装配

    使用方法:

    @resourcename=配置文件中beanid”)

    Name可以省略。则spring根据变量名称自动去spring配置文件中自动匹配beanid

    @configuration注解和@bean

    加在类名上:相当于在配置文件中添加这个这个类的bean配置。

    在类名上加上@configuration注解后,spring会自动将这个类加在到beanfactory中,自动创建这个类的bean对象。

    @bean加在类的方法上,这个方法名会作为自动生成beanid标识。

     

    在某个类中,需要用到其他类的对象的时候,可以在多个方法上@bean。相当于使用这个方法名为idbean对象。

    @import注解

    在类上加@import(类名。classs)后,即引入另一个类的bean对象。可以在当前类中使用另一个bean对象。

     

    Spring事件处理:

    新建类继承applicationContextlistener《事件名称》监听类,继承onApplicationEvent方法实现一个监听器。

    调用ConfigurationapplicationContext对象的start()启动监听器,

    启动监听器后触发事件执行onApplicationEvent方法;

    调用close()方法关闭监听器。

    关闭监听器前触发关闭监听器事件,执行onApplicationEvent方法;

    自定义spring事件:

    先定义类继承applicationEven类。在构造函数中调用applicationEvent类的构造函数,

     

    创建发布事件类。在类中使用发布事件类对象的publishEVent方法发布自定义事件类。触发条件是publish方法。

     

    然后就可以使用了。设置监听器,监听此事件:

     

    当事件遇到触发条件的时候,执行onapplicationEvent方法。

     

    当然在spring的配置文件中,需要对配置自定义类的bean

     

    执行结果:

     

    监听器监听到触发了两次publish方法。执行两次onapplicationEvent方法

    面向切面编程

    xml架构

    步骤:1、导入aop架构。在spring配置文件beans开头。

     

    2、导入需要jia包:

    aspectjrt.jar

    aspectjweaver.jar

    aspectj.jar

    Aopalliance.jar

    3、spring配置文件中,声明一个aspectAspect是于一个类。这个类定义一些方法。这些方法在切点处触发执行。<aspect>

     

    4、<aop:config>中定义一个切点。并命名。<pointcut>切点。

     

    5、声明在切点处执行的方法。和条件。

     

    关键字:

    Before:表示在方法切点方法执行前触发。

    After:表示切点方法执行结束return前触发

    After-returning 表示在方法执行完毕return后触发执行。

    After-throwing 表示抛出异常的时候执行。

    Around :  方法执行之前运行一次,执行之后运行一次

    method:触发后执行的方法。

    Pointcut-ref:切点id,表示切点所在的方法。

    @AspectJ架构

    这个架构师大量使用注解的方式,简化配置

    1、添加支持:

    spring配置文件中加入

     

    同时也要加入<aop:aspectj-autoproxy>,这个配置是提供aop的注解自动支持。

     

    2、添加所需jar

     

    3、声明一个aspect

    在某个类上加上Aspect注解

     

    4、声明一个切入点

    在任意方法上加上@pointcut()切点。括号中execution表示这个切点所在的包。切点id自动定义为当前方法名。

     

    也可以直接定义方法名。

     

    5、aspect类的任意方法上定义触发时机

     

    切入点内联,直接在方法上定义执行某个方法.

     

    学习教程地址在w3cschool中的spring教程。地址:https://www.w3cschool.cn/wkspring/dcu91icn.html

  • 相关阅读:
    # 单调栈 ——Acwing 152. 城市游戏
    # 队列 ——Blah数集(OpenJ_Bailian
    # 队列 ——机器 51Nod
    # 栈 # 队列 ——HDU
    openlayers 为元素添加点击和鼠标悬停事件
    wfs请求filter中判断字段为null的写法
    ArcMap去掉Tiff栅格图层外围的黑色边框
    ArcMap给栅格数据配准并设置坐标系
    ArcMap将线按它的每个节点打散和按照线的相交点打断
    使用turf.js和openlayers配合生成等值面
  • 原文地址:https://www.cnblogs.com/zhangkaikai/p/7204082.html
Copyright © 2020-2023  润新知