spring基础
来源:互联网 发布:中电数据 江海 编辑:程序博客网 时间:2024/05/17 09:34
1.回顾struts与hibernate
struts:MVC中控制层解决方案,可以进行请求数据封装,类型转换,文件上传和下载、数据校验、防表单重复提交...
hibernate:持久层解决方案,把对象保存到数据库,从数据库取出的是对象。
用户访问:
/user.action ----> Tomcat (服务器创建Action、Service、dao
思考:
1. 对象创建创建能否写死?
2. 对象创建细节
对象数量
action 多个 【维护成员变量】
service 一个 【不需要维护公共变量】
dao 一个 【不需要维护公共变量】
创建时间
action 访问时候创建
service 启动时候创建
dao 启动时候创建
3. 对象的依赖关系
action 依赖 service
service依赖 dao
=======================================================
总结:
spring就是解决上面的问题的!
简单来说,就是处理对象的创建的、以及对象的依赖关系!
2.Spring框架
2.1 专业术语了解
组件/框架设计
侵入式设计
引入了框架,对现有的类的结构有影响;即需要实现或继承某些特定类。
例如:Struts框架
非侵入式设计
引入了框架,对现有的类结构没有影响。
例如:Hibernate框架/ Spring框架
控制反转Inversion on control 控制反转 IOC
对象的创建交给外部容器完成,这个就叫做控制反转。
依赖注入
dependency injection
处理对象的依赖关系
区别
控制反转:解决对象的创建问题 【对象的创建交给别人】
依赖注入:在创建完对象后,对象的关系就是依赖注入【同过set方法依赖注入】
AOP
面向切面编程。切面,简单来说来可以理解为一个类,由很多重复代码形成的类。
切面举例:事务、日志、权限;
3.Spring框架概述
spring各个版本中:
在3.0以下的版本,源码有spring中相关的所有包【spring功能+ 依赖包】
如2.5版本;
在3.0以上的版本,源码中只有spring的核心功能包【没有依赖包】
(如果要用依赖包,需要单独下载!)
(1)引入jar包 源码, jar文件:spring-framework-3.2.5.RELEASE
commons-logging-1.1.3.jar 日志
spring-beans-3.2.5.RELEASE.jar bean节点
spring-context-3.2.5.RELEASE.jar spring上下文节点
spring-core-3.2.5.RELEASE.jar spring核心功能
spring-expression-3.2.5.RELEASE.jar spring表达式相关表
以上是必须引入的5个jar文件,在项目中可以用户库管理(User library)!
2) 核心配置文件: applicationContext.xml
Spring配置文件:applicationContext.xml / bean.xml
约束参考:
spring-framework-3.2.5.RELEASE\docs\spring-framework-reference\htmlsingle\index.html
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"></beans>
3)Api
public class App {
// 1. 通过工厂类得到IOC容器创建的对象
@Test
public void testIOC()throws Exception {
//创建对象
// User user = new User();
//现在,把对象的创建交给spring的IOC容器
Resource resource =new ClassPathResource("cn/itcast/a_hello/applicationContext.xml");
//创建容器对象(Bean的工厂), IOC容器= 工厂类+ applicationContext.xml
BeanFactory factory =new XmlBeanFactory(resource);
//得到容器创建的对象
User user = (User) factory.getBean("user");
System.out.println(user.getId());
}
//2. (方便)直接得到IOC容器对象
@Test
public void testAc()throws Exception {
//得到IOC容器对象
ApplicationContext ac =new ClassPathXmlApplicationContext("cn/itcast/a_hello/applicationContext.xml");
//从容器中获取bean
User user = (User) ac.getBean("user");
System.out.println(user);
}
}
2.3. bean对象创建的细节
/**
* 1) 对象创建: 单例/多例
* scope="singleton",默认值, 即 默认是单例【service/dao/工具类】
* scope="prototype",多例; 【Action对象】
*
* 2) 什么时候创建?
* scope="prototype" 在用到对象的时候,才创建对象。
* scope="singleton" 在启动(容器初始化之前), 就已经创建了bean,且整个应用只有一个。
* 3)是否延迟创建
* lazy-init="false" 默认为false, 不延迟创建,即在启动时候就创建对象
* lazy-init="true" 延迟初始化, 在用到对象的时候才创建对象
* (只对单例有效)
* 4) 创建对象之后,初始化/销毁
* init-method="init_user" 【对应对象的init_user方法,在对象创建爱之后执行 】
* destroy-method="destroy_user" 【在调用容器对象的destriy方法时候执行,(容器用实现类)】
*/
@Test
public void testIOC()throws Exception {
//得到IOC容器对象 【用实现类,因为要调用销毁的方法】
ClassPathXmlApplicationContext ac =new ClassPathXmlApplicationContext("cn/itcast/a_hello/applicationContext.xml");
System.out.println("-----容器创建-----");
//从容器中获取bean
User user1 = (User) ac.getBean("user");
User user2 = (User) ac.getBean("user");
System.out.println(user1);
System.out.println(user2);
//销毁容器对象
ac.destroy();
}
- spring-基础
- Spring基础
- Spring 基础
- Spring 基础
- spring 基础
- Spring基础
- spring基础
- Spring基础
- spring基础
- spring基础
- Spring基础
- Spring基础
- Spring 基础
- spring基础
- Spring基础
- Spring基础
- Spring基础
- spring基础
- lnmp/lamp-- 解决Warning: scandir() has been disabled for security reasons in…的问题
- 数据结构学习记录-结构体
- 蒙特.卡罗方法求解圆周率近似值原理与Python实现
- Android Studio 快捷键
- 排序算法摘要
- spring基础
- 10:找最大数序列
- 树莓派3 配置文件conf 高分辨率 串口引脚重映射
- java面试题
- Android 设置控件阴影的三种方式
- 神级好文,亲测有效-入门Webpack,看这篇就够了
- 音乐自动切换和轮播
- Android获取手机唯一标识
- Minmum Depth of Binary Tree