Spring的一些基础知识
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring的一些基础知识相关的知识,希望对你有一定的参考价值。
1. Spring概述
1.1 Spring介绍
Spring是轻量级开源框架,以IOC(Inverse Of Control 控制反转)和AOP(Aspecct Opriented Programming 面向切面编程)为内核,提供了展现层SpringMVC和持久层SpringJDBC以及业务层事务管理等技术。
1.2 Spring的优势
1.2.1 方便解耦,简化开发
1.2.2 AOP编程的支持
1.2.3声明式事务的支持
1.2.4方便程序的测试
1.2.5 方便集成各种优秀框架
1.2.6 降低JavaEE API的使用难度
1.2.7 Spring 的源码是经典的学习范例
2. 程序的耦合和解耦
2.1什么是程序的耦合
耦合:有些类之间不可避免的产生依赖关系,这种依赖关系就叫做耦合。
2.2 工厂模式解耦
在实际开发中,我们把所有的dao、service和action对象全都使用配置文件配置起来。当启动应用服务器加载的时候,通过读取配置文件,把这些对象创建并存起来。
2.3 两个问题
2.3.1 把创建出来的对象存哪里?
由于有很多对象,所以要找个集合存起来,有map和list可以选择。当有查找需求的时候我们使用map。
所以在应用加载时,我们创建一个map,用来存dao、service和action对象,这个map就叫做容器
2.3.2 什么是工厂?
之前,我们获取对象的方式是直接new,是主动的;
现在,我们获取对象要跟工厂要,工厂为我们查找或者创建,是被动的。这种获取对象的方式就叫做控制反转。
工厂一边控制资源,一边为我们提供资源。
控制反转作用:削减计算机程序的耦合。
3. Spring 基于XML的IOC配置
3.1 BeanFactory 和 ApplicationContext的区别
BeanFactory是Spring容器中的顶层接口,ApplicationContext是它的子接口。
区别:创建的时间点不一样。
ApplicationContext:只要一读取配置文件就会创建
BeanFactory:什么时候使用什么时候创建。
3.2 IOC中的bean标签
3.2.1 作用 :
用于配置对象让spring来创建的
默认情况下调用的是类中的无参构造函数,如果没有无参构造函数,则不能创建成功。
3.2.2 属性 :
id: 给对象在容器中提供一个唯一标识,用于获取对象。
class: 指定类的权限定类名。用于反射创建对象,默认情况下调用无参构造函数。
scope: 指定对象的作用范围
singleton:单例的 默认
prototype:多例的
request:Spring创建Bean对象,将对象放在request域中。
Session: Spring创建Bean对象,将对象放在session域中。
Init-method: 指定类中初始化方法名称。
destroy-method: 指定类中的销毁方法名称。
3.2.3 bean的生命周期:
单例对象:scope=”singleton”
一个应用只有一个对象实例
生命周期与容器同步。
多例对象: scope=”prototype”
每次访问对象时,都会重新创建对象实例
生命周期:使用对象时,创建对象实例;长时间不用会被Java垃圾回收器回收。
3.2.4 实例化bean的三种方式:
第一种:使用默认无参构造函数。
<bean id="customerService" class="com.service.impl.CustomerServiceImpl"/>
第二种:Spring管理静态工厂,使用静态工厂的方法创建对象。
<beanid="customerService"class="com.factory.StaticFactory"factory-method="createCustomerService"></bean>
第三种:Spring 管理实例工厂,使用实例工厂的方法创建对象。
<bean id="instancFactory" class="comfactory.InstanceFactory"></bean>
<beanid="customerService"factory-bean="instancFactory" factory-method="createCustomerService"></bean>
3.3 Spring的依赖注入
3.3.1依赖注入的概念:
Spring 框架核心IOC具体实现方式,框架把对象传入,不用自己获取。
3.3.2 构造函数注入:
就是使用类中的构造函数,给成员变量赋值。注意,赋值的操作不是我们自己做的,而是通过配置的方式,
让 spring框架 来为我们注入。
3.3.3 set方法注入:
就是在类中提供需要注入成员的set方法。
3.3.4 使用p名称空间注入数据:
此种方式是通过在xml中导入p名称空间,使用p:propertyName来注入数据,它的本质仍然是
调用类中的set方法实现注入功能。
3.3.5 注入集合属性 :
就是给类中的集合成员传值,它用的也是set方法注入的方式,只不过变量的数据类型都是集合。
4. Spring基于注解的IOC配置
4.1环境搭建
4.1.1 第一步:拷贝必备jar包到工程的lib目录
4.1.2第二步:在类的根路径下创建一个任意名称xml文件
4.1.3 第三步:使用@component注解配置管理的资源
4.1.4 第四步:在Spring配置文件中开启Spring对注解IOC的支持
4.2 常用注解
4.2.1 用于创建对象的:
相当于:<bean id="" class="">
4.2.1.1 @component:
作用:把资源让Spring来管理,相当于在xml文件配置一个bean。
4.2.1.2 @controler @service @repository:
@Controller:一般用于表现层的注解。
@Service:一般用于业务层的注解。
@Repository:一般用于持久层的注解。
4.2.2 用于注入数据的:
相当于:<property name="" ref="">
<property name="" value="">
4.2.2.1 @autowired
作用:
自动按照类型注入。当使用注解注入属性时,set方法可以省略。它只能注入其他bean类型。当有多个类型匹配时,
使用要注入的对象变量名称作为bean的id,在spring容器查找,找到了也可以注入成功。找不到就报错。
4.2.2.2 @qualifier
作用:
在自动按照类型注入的基础之上,再按照Bean的id注入。它在给字段注入时不能独立使用,必须和@Autowire一起
使用;但是给方法参数注入时,可以独立使用。
属性:
value:指定bean的id。
4.2.2.3 @resource
作用:
直接按照Bean的id注入。它也只能注入其他bean类型。
属性:
name:指定bean的id。
4.2.2.4 @value
作用:
注入基本数据类型和String类型数据的
属性:
value:用于指定值
4.2.3 用于改变作用范围的:
相当于:<bean id="" class="" scope="">
4.2.3.1 @scope
作用:
指定bean的作用范围。
属性:
value:指定范围的值。
取值:singleton prototype request session globalsession
4.2.4 和生命周期相关的:
相当于:<bean id="" class="" init-method="" destroy-method="" />
4.2.4.1 @postConstruct
作用:
用于指定初始化方法
4.2.4.2 @predestroy
作用:
用于指定销毁方法
5.Spring的纯注解配置
5.1注解说明
5.1.1:@configration:
作用:用于指定当前类是一个spring配置类,当创建容器时会从该类上加载注解。获取容器时需要使用
AnnotationApplicationContext(有@Configuration注解的类.class)。
属性:
value:用于指定配置类的字节码
5.1.2:@componentScan
作用:
用于指定spring在初始化容器时要扫描的包。作用和在spring的xml配置文件中的:
<context:component-scan base-package="com.cn"/>是一样的。
属性:
basePackages:用于指定要扫描的包。和该注解中的value属性作用一样。
5.1.3:@propertySource
作用:
用于加载.properties文件中的配置。例如我们配置数据源时,可以把连接数据库的信息写到properties配置文
件中,就可以使用此注解指定properties配置文件的位置。
属性:
value[]:用于指定properties文件位置。如果是在类路径下,需要写上classpath:
5.1.4: @import
作用:
用于导入其他配置类,在引入其他配置类时,可以不用再写@Configuration注解。当然,写上也没问题。
属性:
value[]:用于指定其他配置类的字节码。
5.1.5:@bean
作用:
该注解只能写在方法上,表明使用此方法创建一个对象,并且放入spring容器。它就相当于我们之前在xml配置
中介绍的factory-bean和factory-method。
属性:
name:给当前@Bean注解方法创建的对象指定一个名称(即bean的id)。
5.2 关于Spring注解和xml选择问题:
注解的优势:
配置简单,维护方便(我们找到类,就相当于找到了对应的配置)。
XML的优势:
修改时,不用改源码。不涉及重新编译和部署。
.........待续
本文出自 “亦轻尘的小博客” 博客,请务必保留此出处http://15201565095.blog.51cto.com/12905158/1953378
以上是关于Spring的一些基础知识的主要内容,如果未能解决你的问题,请参考以下文章