初始Spring(一)
来源:互联网 发布:人工智能先驱 编辑:程序博客网 时间:2024/06/02 19:43
Spring知识点梳理:
Spring的优势:
(1)通过IOC帮助开发者管理,维护对象;
(2)通过AOP,帮助开发者统一业务逻辑之外的功能代码,如:记录日志,检查权限等;
(3)提供了一组API和配置方式来帮助我们简化事务管理;
(4)方便集成其它框架,如Struts,Hibernate、Hessian、Quartz的直接集成;
(5)对很多Java EE API(如JDBC,JavaMail,远程调用)进行了简易封装,降低这些API的使用难度。
- Spring框架引入
Struts与Hibernate可以做什么事?
Struts:
MVC中控制层解决方案 :可以进行请求数据自动封装、类型转换、文件上传、效验…;
Hibernate:
持久层的解决方案:可以做到,把对象保存到数据库, 从数据库中取出的是对象;
- 传统开发的模式
- 基于mvc模式进行项目开发,项目结构为:
domain(实体类) / dao / service / action
- 那么传统开发模式的开发流程和执行流程是什么样的呢?
// 1.我们会在底层创建 实体类
class User{
}
//2. 之后是dao持久层
class UserDao{
..访问db
}
//3. 在往上是service业务逻辑层
class UserService{
UserDao userDao = new UserDao();
}
//4. 最后是action视图层
class UserAction{
UserService userService=new UserService();
..
//拿到数据或结果
}
用户访问在浏览器输入/user.action -->
发送请求到Tomcat (服务器逐级创建Action,Service,dao)-->
action拿到数据,传递给service--->
service对数据进行合理性校验,数据正确传递给DAO--->
DAO将数据存储进数据库,并返回存储结果--->
service返回DAO结果--->
action返回结果--->
服务器返回给浏览器响应结果
- 问题:
- 对象创建能否写死:
不能,如果写死不利于维护,以及程序的拓展;
如何解决呢?
可以将实例化对象写入到配置文件中,然后利用"工厂"来创建
- 对象创建细节
对象数量:
action
多个,因为web项目是并发访问项目,每次访问都要创建【维护成员变量】
service
一个,没有必要为每次访问的对象创建一个新的业务逻辑 【不需要维护公共变量】
dao
一个 ,同上 【不需要维护公共变量】
创建时间:
action
访问时候创建
service
启动时候创建
dao
启动时候创建
- 对象的依赖关系
action 依赖
service
service依赖
dao
- 总结
spring可以解决如上问题
简单来说,就是处理对象的创建,以及维护对象的依赖关系!
- Spring相关信息
- Spring框架的主页:http://www.springsource.org/
- Spring框架下载地址:http://www.springsource.org/download
- Spring特点
- 利用控制反转(IOC)和面向切面(AOP)来构架多层JavaEE系统的框架,可以简化企业开发;
- Spring是一个分层的JavaSE/EE(一站式) 轻量级开源框架;
- Spring是非侵入式设计,可在适当时安装或卸载Spring。
- Spring提供的一站式解决方案
Spring Core
Spring的核心功能: IOC容器, 解决对象创建及依赖关系
Spring Web
Spring对web模块的支持;
可以与Struts整合,让Struts的action创建交给Spring
也可以使用自己的spring mvc模式
Spring DAO
Spring 对jdbc操作的支持 【JdbcTemplate模板工具类】
Spring ORM
Spring对ORM的支持:
既可以与hibernate整合,也可以对hibernate的封装进行操作;
Spring AOP
切面编程
SpringEE
Spring 对javaEE其他模块的支持
- 专业术语了解
- 组件/框架设计
- 侵入式设计:引入的框架,对现有的类的结构有影响;即需要实现或继承某些特定类。
例如: Struts框架;
- 非侵入式设计:引入了框架,对现有的类结构没有影响。
例如:Hibernate框架 / Spring框架;
- 控制反转(IOC):去撩闲-->IOC与DL,或者调戏一下御姐-->IOC到底是什么?
- spring核心,对象的创建交给外部容器完成,就是控制反转.
- AOP:去撩闲-->AOP
- 面向切面编程。切面,简单来说来可以理解为一个类,由很多重复代码形成的类。
切面类举例:事务、日志、权限;
- 容器
- 包含并管理应用对象的配置和生命周期,但不同于传统的重量级EJB容器。
- 框架
- Spring可将简单的组件配置、组合成为复杂的应用。例如,在一个XML文件里应用对象被声明式地组合;
- Spring也提供了很多基础功能(事务管理、持久化框架集成等等)。
- MVC
- Spring的作用是整合,但不局限于此,可被看做是一个企业级解决方案的框架。
- Spring开发步骤
1.首先要注意,在spring各个版本中:
3.0以下的版本,源码有spring中相关的所有包【spring功能 + 依赖包】
如2.5版本;
3.0以上的版本,源码中只有spring的核心功能包【没有依赖包】
(如果要用依赖包,需要单独下载!)
2. 源码:
Spring jar包:spring-framework-3.2.5.RELEASE(压缩包)
以下是必须引入的5个jar文件,建议使用用户库进行管理
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表达式相关表
3.设定配置文件:
核心配置文件: applicationContext.xml
Spring配置文件:applicationContext.xml / bean.xml
约束参考:
spring-framework-3.2.5.RELEASE\docs\spring-framework-reference\htmlsingle\index.html
Spring基本约束头:
<beansxmlns="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>
4.Spring常用API:
1.得到IOC容器对象
ApplicationContext ac = new ClassPathXmlApplicationContext("配置文件路径");
2.从容器中获取bean
ac.getBean("配置文件的id");
- 加载Spring配置文件的几种方式
方式一:在类路径下寻找配置文件来实例化容器,详细说明:主要实现类
(1)ApplicationContext ctx=newClassPathXmlApplicationContext(new String[]{"beans.xml"});
(2)ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
UserDao userDao=(UserDao)context.getBean("userDao");
可以在整个类路径中寻找xml文件:
* 通过这种方式加载。需要将spring的配置文件放到当前项目的classpath路径下;
* classpath路径指的是当前项目的src目录,该目录是java源文件的存放位置。
方式二:在文件系统路径下寻找配置文件来实例化容器,详细说明:主要实现类
ApplicationContext context=new FileSystemXmlApplicationContext("C:/conf/applicationContext.xml");
UserDao userDao = (UserDao) context.getBean("userDao");
利用指定的相对路径或者绝对路径来读取配置文件。
方式三:利用ClassPathResource,详细说明:Resource的具体实现类
Resource cr = new ClassPathResource("applicationContext.xml");
BeanFactory bf=new XmlBeanFactory(cr);
UserDao userDao = (UserDao)bf.getBean("userDao");
- 从Spring容器获取bea
- 当spring容器启动后,spring容器可管理bean对象的创建、销毁等生命周期,只需从容器直接获取Bean对象,而不用编写代码来创建bean对象。
- 两种方式:
通过工厂类得到IOC容器创建的对象
Resource resource=new ClassPathResource("hey/up/a_hello/applicationContext.xml");
BeanFactory factory=new XmlBeanFactory(resource);
User user=(User) factory.getBean("user");
(方便)直接得到IOC容器对象
ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
User user=(User) cxf.getBean("user");
- 第一个示例
//举个栗子,此栗使用无参构造方法:无参构造方法创建对象
public class User {
private int id;
private String name;
public User() {
super();
System.out.println("------User对象创建------");
}
public void init_user() {
System.out.println("创建对象之后,初始化");
}
public void destroy_user() {
System.out.println("IOC容器销毁,user对象回收!");
}
//get,set略
}
public class App1_get_ioc{
// 1.通过工厂类得到IOC容器创建的对象
@Test
public void testIOC()throws Exception{
//创建对象
// User user = new User();老式创建方式
//现在,把对象的创建交给spring的IOC容器
Resource resource=new ClassPathResource("hey/up/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("hey/up/hello/applicationContext.xml");
//从容器中获取bean
User user=(User) ac.getBean("user");
System.out.println(user);
}
}
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="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">
<!-- IOC容器的配置: 要创建的所有的对象都配置在这里
<bean id="user" class="hey.up.hello.User" init-method="init_user" destroy-method="destroy_user" scope="singleton" lazy-init="false"></bean>
-->
<beanid="user"class="hey.up.hello.User"></bean>
</beans>
- 初始Spring(一)
- 初始spring(三)
- 初始spring(七)
- 初始spring(八)
- echarts 初始(一)
- 初始xml(一)
- iOS,初始篇(一)
- JAVA初始入门(一)
- 项目初始点(一)
- python-初始篇(一)
- 初始Spring
- 框架-------(二)Spring和SpringMVC框架(序列一初始原理概念)
- spring 01 -spring初始
- Quartz学习(一)--初始Quartz
- 学习android的初始阶段(一)
- C++学习篇(一)---初始C++
- Flume学习(一)Flume初始
- Hive总结(一)hive初始
- STL源码剖析笔记-5关联式容器
- 调用ueditor编辑器
- Opencv 2.4.9在Ubuntu下的配置安装
- 指南针的分享
- PAT(Advanced Level)1098. Insertion or Heap Sort
- 初始Spring(一)
- cesiumjs学习笔记之三——cesium-navigation插件
- No module named Tkinter
- 修改VirtualBox中mac的分辨率
- docker安装带GPU模式的caffe(Centos7)
- Lease timeout of 0 seconds expired. 租约过期
- BJ模拟:相似子串(树链剖分+hash)
- ubuntu 安装tar.gz包
- HDU1799 循环多少次?