Spring框架总结——第一部分
来源:互联网 发布:孙振耀。知乎 编辑:程序博客网 时间:2024/05/21 16:43
Spring框架的概述
Spring是分层的Java SE/EE应用 full-stack轻量级开源框架,以IoC(Inverse Of Control:反转控制)和AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层Spring MVC和持久层Spring JDBC以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE企业应用开源框架。
简单来说,是一个开源框架。让java开发模块化,并且全面。贯穿逻辑层,表现层,持久层。让每一个功能模块都可以独立分开,降低耦合,提高代码复用率!
IOC:控制反转:将创建对象的权利反转给Spring框架。
特点:
1、 IOC容器中存储的对象默认都是单例的,节省资源。
2、 启动服务器默认就把对象创建出来了,用的时候直接从容器中拿。提高效率。
3、 还可以使用依赖注入,简便开发。
4、 降低程序的耦合,提高维护性。
IOC的底层原理:利用工厂+配置文件模式来创建对象,并且存起来。
配置文件配置什么信息,工厂就创建什么对象。存到IOC容器中,要使用对象直接从容器中获取。
IOC入门:
关于配置文件的编写
名称和位置:随意定义名称,可放置随意位置。
一般推荐在类的根路径,名称为applicationContecxt.xml。
导入约束:
配置约束:
将资源(实现类)交给Spring框架的IOC容器去管理(创建对象):
<bean id=”” class=””/>
默认情况下,调用的是该实现类的空参构造。如果没有空参构造则会创建失败。
主要属性:
属性id:唯一的字符串,对象的名称,要求必须是唯一的。
属性class:要IOC容器管理的实现类的全路径。用于反射创建对象。
其他属性:
scope:指定对象的作用范围(作用范围)。
一般属性取值是singleton:默认,单例的(加载配置文件时,对象就会产生。容器存在,对象就会一直存在)但是线程时安全的,因为不涉及成员属性的数据变化。只是单纯调用方法。
prototype:多例的。每次访问对象时,会创建一个对象。
只有当对象在使用中,就会存在。如果对象长时间不用,就会被java的垃圾回收器回收了。
什么时候能用到多例的呢?
把action交给Spring矿框架的IOC容器去管理的时候,因为Action是多例。所以创建对象 必须得是多例的。
想想为什么Action是多 例的?
因为两个请求使用同一个Action对象,当存储数据的时候,会引起安全问题。
init-method:指定类中初始化方法名称
destroy-method:指定类中销毁方法名称
从工厂中获取对象——注意导包是Spring框架的包
//创建工厂
ApplicationContext ac = new ClassPathXmlApplicationContext(“applicationContext.xml”);
//根据配置文件的id值来获取对象
Object obj = ac.getBean(“id值”);//返回一个Object类型的对象,强转成想要的对象。
一般,强转成的类型是实现类的接口类型。
关于ApplicationContext工厂和BeanFactory工厂:(工厂版本)
1、 BeanFactory工厂是Spring框架的容器中的顶层接口。
2、 ApplicationContext工厂是BeanFactory工厂的子接口。
两者区别:
创建对象时间不一样。
ApplicationContext:采用的是立即加载模式,只要一读取配置文件,就会创建对象。
BeanFactory:采用的是延迟加载模式,什么时候用到(获取)对象,什么时候才会创建对象。
注意ApplicationContext是一个接口,要创建对象得new它的实现类。它有两个实现类:
1. ClassPathXmlApplicationContext类,它默认是从类的根目录下去读指定名称的配置文件,所以它的构造方法得传入一个字符串形式的文件名字(带后缀名)。
如果配置文件不在src下,它的构造方法得传入字符串型的配置文件路径。
只要一加载配置文件,就会把对象创建出来,并且存储。
2. FileSystemXmlApplicationContext类:它是从磁盘上加载配置文件。
项目一般会把所有的配置文件放到项目中。所以推荐第一种加载方式。
依赖注入:
依赖注入时Spring框架IOC的具体实现。
简单来说,就是坐等框架把对象传入,不用我们自己去获取。
直接上代码演示
Set方法方式注入—最简单、最常用
/*
* 使用依赖注入 见CustomerDao对象注入到当前CustomerServiceImpl类中————使用set方法
* 创建私有成员CustomerDao对象属性,然后提供set方法,并且在配置文件中进行配置
*/
public class CustomerServiceImpl implements CustomerService {
//创建私有成员属性
private CustomerDaocd;
//提供set方法
public void setCd(CustomerDao cd) {
this.cd =cd;
}
@Override
public void save() {
// TODO Auto-generated method stub
System.out.println("业务层爆粗了..");
cd.save();
}
}
<!-- 将CustomerServiceImpl类交给Spring框架的IOC容器去管理 -->
<beanid="customerService"class="com.itheima.service.impl.CustomerServiceImpl">
<!--给CustomerServiceImpl类的cd属性注入customerDao对象值
name:找的是类中set方法后面的部分
ref:给属性赋值是其他bean类型的
value:给属性赋值是基本数据类型和string类型的
-->
<propertyname="cd" ref="customerDao"/>
</bean>
<beanid="customerDao"class="com.itheima.dao.impl.CustomerDaoImpl"></bean>
注入集合属性
给类中的集合成员传值,它用的也是set方法注入的方式,只不过变量的数据类型都是集合。
提供私有成员属性集合或者数组。
给成员集合或者数组提供set方法
在配置文件中进行配置。
<bean id="customerService"class="com.itheima.service.impl.CustomerServiceImpl">
<!-- 在注入集合数据时,只要结构相同,标签可以互换 -->
<!-- 给数组注入数据 -->
<propertyname="myStrs">
<set>
<value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</set>
</property>
<!-- 注入list集合数据 -->
<propertyname="myList">
<array>
<value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</array>
</property>
<!-- 注入set集合数据 -->
<propertyname="mySet">
<list>
<value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</list>
</property>
<!-- 注入Map数据 -->
<propertyname="myMap">
<props>
<propkey="testA">aaa</prop>
<propkey="testB">bbb</prop>
</props>
</property>
<!-- 注入properties数据 -->
<propertyname="myProps">
<map>
<entrykey="testA"value="aaa"></entry>
<entrykey="testB">
<value>bbb</value>
</entry>
</map>
</property>
</bean>
- Spring框架总结——第一部分
- 第一部分:spring框架概述
- 第一部分:spring框架概述
- Spring说明文档翻译1——第一部分,spring框架预览
- Spring框架整体巩固学习 第一部分
- struts2框架的第一部分的总结
- Spring框架总结——第二部分(基于xml配置+注解的方式配置IOC)
- 《算法导论》学习总结——第一部分
- ★★ 总结iframe的使用 第一部分——第三部分
- Java框架学习笔记——第一个Spring示例
- 黑马程序员——OCFoundation框架部分知识总结
- 【hibernate框架】EJBQL第一部分
- Spring框架第一讲
- Spring框架-第一弹
- Foundation of Machine Learning 笔记第一部分——PAC学习框架
- NGUI框架部分总结
- 面试框架部分总结
- Apache Geronimo 和 Spring 框架,第 2 部分: 构建第一个应用程序
- #java#设置textfield或其他组件字体的颜色
- Vim--编辑器之神
- JS中获取以及操作DOM中的节点
- 安卓 反编译工具
- AV同步
- Spring框架总结——第一部分
- vue.js中v-for的使用及索引获取
- tomcat 阿里云启动慢的解决方法
- 享元模式(Flyweight Pattern)
- windows, mac,linux 环境下搭建python,如果你遇到坑,请查阅此处。
- 操作系统内存管理之 ---堆和栈的区别
- RedHat/CentOS6.4---永久关闭iptables
- 用Hexo制作自己的静态博客
- 用Shell脚本编写程序,将100以内能被3或7整除的数的和显示出来.