spring 基础学习笔记
spring 初始理解
1、spring 只是一个框架,是一些相应的 jar包,相当于一个项目的管理者,各种其他框架的中介,项目的监管机构。
2、主要特点是依赖注入DI、面向切面AOP,控制反转IOC
3、核心:加载applicationContext。Xml配置文件,生成applicationContext对象,在配置文件中的bean也会生成各种bean对象,这些bean对象相当于配置文件中的各个类的初始化,或者框架配置, spring通过applicationContext这个对象去管理这些别的框架或者类放在配置文件中让spring代理的bean对象。
4、Spring创建这些bean对象方法有两种,xml里配置方式,和注解方式(直接在类上加注解@component或者@repository);spring会将这些生成的bean对象自动注入到相应的位置。
5、Spring启动是在web。Xml中,需要在web.xml中配置加上applicationContext配置文件。
Spring体系结构
Spring是模块化的。
主要模块有 核心模块,中间件,web,数据管理四个大类:
核心模块:
Core:spring的核心中的核心模块;提供依赖注入和控制反转ioc的基本实现方法。
Bean: beanFactory工厂模式,设计模式中的工厂模式,生产各种bean对象的工厂。
Context:上下文管理模块: 在core和bean模块的基础上,管理bean的各种实现和注入等。
Spel:表达式语言模块:一种spring特有的表达式语言,注解是在这里面管理?
中间件:
AOP:提供面向切面编程实现。
Aspects:强大的面向切面变成集成框架。
测试模块:提供单元测试,Junit模块。
Messaging:webService服务的支持。
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对象。通过applicationContext的getBean方法,方法的参数为配置的类的唯一id,返回一个springBean对象,通过强制转换生成相应类的对象。
3、spring配置文件中bean的定义:
Bean的配置属性有:
1、Class:指定当前bean的类
Name/id:用于标识当前bean对象的唯一性标识。之后可以直接通过id调用这个bean对象。
2、Scope:使用单例singleton或者多例模式prototype产生类对象实例。
3、Constructor-arg:
4、Properties:
5、autoWining mode:
6、Lazy-initialization mode:
7、Initialization:
8、Destruction:
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、基于getter和setter函数对类中属性进行赋值
为变量创建getter和setter方法后。在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方式自动装配
使用方法:
@resource(name=”配置文件中bean的id名”)
Name可以省略。则spring根据变量名称自动去spring配置文件中自动匹配bean的id。
@configuration注解和@bean
加在类名上:相当于在配置文件中添加这个这个类的bean配置。
在类名上加上@configuration注解后,spring会自动将这个类加在到beanfactory中,自动创建这个类的bean对象。
@bean加在类的方法上,这个方法名会作为自动生成bean的id标识。
在某个类中,需要用到其他类的对象的时候,可以在多个方法上@bean。相当于使用这个方法名为id的bean对象。
@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配置文件中,声明一个aspect。Aspect是于一个类。这个类定义一些方法。这些方法在切点处触发执行。<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