Spring01
2016-05-24 21:20
288 查看
1.spring(官网:www.spring.io)
1)定义:是一个轻量级的开源的应用开发框架
2)应用开发框架特点:
*简化代码: spring把一些常用的API做了一层封装,
比如:使用spring JDBC访问数据库,就不再需要编写获得连接与关闭连接的代码
*解耦: spring容器帮我们管理对象与对象之间的关系,故对象之间是松耦合的,方便以后代码的维护
*集成: 可以集成其它的第三方的框架,比如定时任务处理(Quartz)
2.spring容器
1)spring框架中的一个重要模块,用来管理对象
2)启动
*将spring相关的jar文件导入
*准备spring配置文件(告诉容器创建哪些对象)
*启动容器 ApplicationContext ac=new ClassPathXmlApplicationContext("配置文件路径名");
3)创建一个对象
*无参构造器 spring容器将所有的被其管理的java类都称之为JavaBean
配置文件中配置需要实例化的类,然后启动容器,调用其getBean()方法即可
eg:<bean id="d1" class="java.util.Date"/> //id属性:要求唯一 class属性:写完整的类名 包名+类名
Date d1=ac.getBean("d1",Date.class);
*静态工厂方法
配置文件配置好,其余同
eg:<bean id="c1" class="java.util.Calendar" factory-method="getInstance"/> //factory-method属性:指定要调用的静态方法
*实例工厂方法
配置文件配置好,其余同
eg:<bean id="c2" class="java.util.GregorianCalendar" /> //factory-method属性:要调用的实例方法
<bean id="time1" factory-bean="c2" factory-method="getTime"/> //factory-bean属性:要调用的对象的id
4)生命周期的管理
*初始化
init-method属性:指定初始化方法 容器在创建好相应的实例之后,会立即调用该实例的初始化方法
*销毁
destroy-method属性:指定销毁方法 容器在删除实例之前,会调用该实例的销毁方法
注:只有当作用域为singleton(单例)时,销毁方法才会执行
5)作用域
*默认情况下,对于一个bean,spring容器只会创建一个实例
*scope属性:指定作用域,缺省值是 "singleton(单例)",
若值为 "prototype(原型)",则每getBean一次,会创建一个新的实例
6)延迟加载
*spring容器启动后,会扫描整个配置文件,然后将单例的bean先创建好
*若希望只有当getBean时才创建,可以延迟加载
*lazy-init属性:若值为true,表示延迟加载,即容器启动之后不会创建实例,只有当getBean时才会创建
3.spring IOC
1)IOC(控制反转)定义
对象之间的依赖关系交给容器来管理
2)DI(依赖注入)定义
容器通过调用对象的构造器或者set方法来建立对象之间的依赖关系
注:IOC是一种思想,DI是实现IOC的主要技术途径
3)DI的两种方法
*set方法 容器调用对象的set方法来建立对象之间的依赖关系
a.有无参构造器
b.有set方法
c.在配置文件中使用<property name="具体哪个set方法" ref="set方法参数"/>配置
name属性:要注入的属性名称 ref属性:要注入的对象的id
*构造器 容器调用对象的构造器来建立对象之间的依赖关系
a.有带参构造器
b.在配置文件中使用<constructor-arg index="具体哪个带参构造器" ref="带参构造器参数"/>配置
index属性:从0开始,指定参数的位置(即要给第几个参数赋值)
4)自动装配
*默认情况下,容器是禁止自动装配的
*如要自动装配,必须设置autowire=以下三个值:
a.byName:查找id为(成员)属性名称的bean,然后调用set方法完成注入
需要有无参构造器,有set方法
b.byType:查找与(成员)属性类型一致的bean,然后调用set方法完成注入
需要有无参构造器,有set方法 如果找到多个,会出错
c. constructor:查找与属性类型一致的bean,然后调用构造器完成注入
需要有对应的构造器
*自动装配尽量少用,若要用,可使用byName
5)spring容器注入基本类型的值
*<property name="name" value="张三"></property>
*<property name="age"><value>25</value></property>
6)spring容器注入集合( List Set Map Properties )
*List/Set注入:<list><value>北京</value><value>上海</value></list>
*Map注入:<map><entry key="Java" value="90"></entry><entry key="C++" value="85"></entry></map>
*Properties 注入:<props><prop key="user">Tome</prop><prop key="password">123456</prop></props>
*将集合类型当做一个bean来配置
<util:list id="cityList"><value>香港</value><value>澳门</value></util:list>
在bean中 <property name="cities" ref="cityList"></property>来引用配置好的集合
其余集合类似
7)spring表达式 用来读取bean的属性值,语法上类似EL表达式
*<property name="name" value="#{eb1.name }"/> //读取id为eb1的bean的name属性值
*<property name="city" value="#{eb1.cities[1] }"/> //读取id为eb1的bean的cities属性,该属性是一个List,读取下标为1的元素的值
*<property name="score" value="#{eb1.scores.Java}"/>
//读取id为eb1的bean的scores属性值,该属性是一个Map,读取的key为Java的值
*读取location属性指定位置的文件的内容,并将内容存放到Properties对象中
<util:properties id="config" location="classpath:config.properties"></util:properties>
<property name="pageSize" value="#{config.pageSize }"></property>
8)使用注解
*配置组件扫描
容器会扫描base-package指定的包及其子包下面的所有的类,如果该类前面有特定的注解(如@Component),
则容器将其纳入,进行管理(相当于在配置文件中,有一个bean)
<context:component-scan base-package="要扫描的包名"/>
*@Component 通用注解 @Repository 持久化层组件注解
@Service 业务层组件注解 @Controller 控制层组件注解
*获得对象:同bean 默认的id是首字母小写之后的类名 可在注解后边自定义id名
*生命周期相关注解:@PostConstruct 指定初始化方法 @PreDestroy 指定销毁方法
*作用域相关注解(@Scope): "singleton"单例(默认) "prototype" 多例
*延迟加载相关注解(@Lazy):默认为false 表示不延迟加载 true表示延迟加载
*依赖注入的注解:
a.构造器/set方法注入:
@Autowired //声明需要为其注入bean
@Qualifier("id") //指定要注入的bean的id
b.set方法注入:@Resource (name="id") //name属性指定要注入的bean的id
*注入spring表达式/基本类型的值的注解:@Value("")
1)定义:是一个轻量级的开源的应用开发框架
2)应用开发框架特点:
*简化代码: spring把一些常用的API做了一层封装,
比如:使用spring JDBC访问数据库,就不再需要编写获得连接与关闭连接的代码
*解耦: spring容器帮我们管理对象与对象之间的关系,故对象之间是松耦合的,方便以后代码的维护
*集成: 可以集成其它的第三方的框架,比如定时任务处理(Quartz)
2.spring容器
1)spring框架中的一个重要模块,用来管理对象
2)启动
*将spring相关的jar文件导入
*准备spring配置文件(告诉容器创建哪些对象)
*启动容器 ApplicationContext ac=new ClassPathXmlApplicationContext("配置文件路径名");
3)创建一个对象
*无参构造器 spring容器将所有的被其管理的java类都称之为JavaBean
配置文件中配置需要实例化的类,然后启动容器,调用其getBean()方法即可
eg:<bean id="d1" class="java.util.Date"/> //id属性:要求唯一 class属性:写完整的类名 包名+类名
Date d1=ac.getBean("d1",Date.class);
*静态工厂方法
配置文件配置好,其余同
eg:<bean id="c1" class="java.util.Calendar" factory-method="getInstance"/> //factory-method属性:指定要调用的静态方法
*实例工厂方法
配置文件配置好,其余同
eg:<bean id="c2" class="java.util.GregorianCalendar" /> //factory-method属性:要调用的实例方法
<bean id="time1" factory-bean="c2" factory-method="getTime"/> //factory-bean属性:要调用的对象的id
4)生命周期的管理
*初始化
init-method属性:指定初始化方法 容器在创建好相应的实例之后,会立即调用该实例的初始化方法
*销毁
destroy-method属性:指定销毁方法 容器在删除实例之前,会调用该实例的销毁方法
注:只有当作用域为singleton(单例)时,销毁方法才会执行
5)作用域
*默认情况下,对于一个bean,spring容器只会创建一个实例
*scope属性:指定作用域,缺省值是 "singleton(单例)",
若值为 "prototype(原型)",则每getBean一次,会创建一个新的实例
6)延迟加载
*spring容器启动后,会扫描整个配置文件,然后将单例的bean先创建好
*若希望只有当getBean时才创建,可以延迟加载
*lazy-init属性:若值为true,表示延迟加载,即容器启动之后不会创建实例,只有当getBean时才会创建
3.spring IOC
1)IOC(控制反转)定义
对象之间的依赖关系交给容器来管理
2)DI(依赖注入)定义
容器通过调用对象的构造器或者set方法来建立对象之间的依赖关系
注:IOC是一种思想,DI是实现IOC的主要技术途径
3)DI的两种方法
*set方法 容器调用对象的set方法来建立对象之间的依赖关系
a.有无参构造器
b.有set方法
c.在配置文件中使用<property name="具体哪个set方法" ref="set方法参数"/>配置
name属性:要注入的属性名称 ref属性:要注入的对象的id
*构造器 容器调用对象的构造器来建立对象之间的依赖关系
a.有带参构造器
b.在配置文件中使用<constructor-arg index="具体哪个带参构造器" ref="带参构造器参数"/>配置
index属性:从0开始,指定参数的位置(即要给第几个参数赋值)
4)自动装配
*默认情况下,容器是禁止自动装配的
*如要自动装配,必须设置autowire=以下三个值:
a.byName:查找id为(成员)属性名称的bean,然后调用set方法完成注入
需要有无参构造器,有set方法
b.byType:查找与(成员)属性类型一致的bean,然后调用set方法完成注入
需要有无参构造器,有set方法 如果找到多个,会出错
c. constructor:查找与属性类型一致的bean,然后调用构造器完成注入
需要有对应的构造器
*自动装配尽量少用,若要用,可使用byName
5)spring容器注入基本类型的值
*<property name="name" value="张三"></property>
*<property name="age"><value>25</value></property>
6)spring容器注入集合( List Set Map Properties )
*List/Set注入:<list><value>北京</value><value>上海</value></list>
*Map注入:<map><entry key="Java" value="90"></entry><entry key="C++" value="85"></entry></map>
*Properties 注入:<props><prop key="user">Tome</prop><prop key="password">123456</prop></props>
*将集合类型当做一个bean来配置
<util:list id="cityList"><value>香港</value><value>澳门</value></util:list>
在bean中 <property name="cities" ref="cityList"></property>来引用配置好的集合
其余集合类似
7)spring表达式 用来读取bean的属性值,语法上类似EL表达式
*<property name="name" value="#{eb1.name }"/> //读取id为eb1的bean的name属性值
*<property name="city" value="#{eb1.cities[1] }"/> //读取id为eb1的bean的cities属性,该属性是一个List,读取下标为1的元素的值
*<property name="score" value="#{eb1.scores.Java}"/>
//读取id为eb1的bean的scores属性值,该属性是一个Map,读取的key为Java的值
*读取location属性指定位置的文件的内容,并将内容存放到Properties对象中
<util:properties id="config" location="classpath:config.properties"></util:properties>
<property name="pageSize" value="#{config.pageSize }"></property>
8)使用注解
*配置组件扫描
容器会扫描base-package指定的包及其子包下面的所有的类,如果该类前面有特定的注解(如@Component),
则容器将其纳入,进行管理(相当于在配置文件中,有一个bean)
<context:component-scan base-package="要扫描的包名"/>
*@Component 通用注解 @Repository 持久化层组件注解
@Service 业务层组件注解 @Controller 控制层组件注解
*获得对象:同bean 默认的id是首字母小写之后的类名 可在注解后边自定义id名
*生命周期相关注解:@PostConstruct 指定初始化方法 @PreDestroy 指定销毁方法
*作用域相关注解(@Scope): "singleton"单例(默认) "prototype" 多例
*延迟加载相关注解(@Lazy):默认为false 表示不延迟加载 true表示延迟加载
*依赖注入的注解:
a.构造器/set方法注入:
@Autowired //声明需要为其注入bean
@Qualifier("id") //指定要注入的bean的id
b.set方法注入:@Resource (name="id") //name属性指定要注入的bean的id
*注入spring表达式/基本类型的值的注解:@Value("")
相关文章推荐
- java编程思想题目3
- java基础编程思想题目2
- java命名惯例
- java基础编程思想题目
- Java ConcurrentModificationException异常原因和解决方法
- Eclipse新建C project不会自动生成Includes文件夹的解决办法
- Spring MVC视图(三)
- 【Java基础】多线程
- Spring学习(五)Spring开发包介绍
- RxJava 操作符flatmap
- Java 数组 foreach
- java JDBC连接数据库
- eclipse 创建git工程
- java35java当中内部类和匿名类
- java设计模式-建造者模式
- XMLRPC简介与java例子
- Spring MVC学习笔记——注解式控制器
- Java编写一个四位数的随机验证码
- Java之3.Math类、Date、SimpleDateFormat
- Spring单例模式与线程安全