首页 > 技术文章 > spring 基础学习笔记

zhangkaikai 2017-07-19 09:44 原文

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

 

推荐阅读