标签:
1.什么是Spring :
Spring是分层的JavaSE/EE full-stack(一站式) 轻量级开源框架
n 分层: 来自JavaEE体系结构 (客户端层、 web层、业务层、持久层 )
服务器端三层结构 (web层、业务层、持久层)
Servlet + JSP ---- web层技术 ---- Struts2框架
JDBC 接口 ---- 持久化技术 ---- Hibernate框架
EJB 框架(复杂) ---- 业务层技术 ---- Spring 框架 (取代EJB出现 )
Spring 出现,就是为了解决常见JavaEE 企业开发问题!
一站式: Spring框架提供了 web层(表现层) SpringMVC、业务层 IoC、AOP和事务管理、持久层JdbcTemplate 各层javaEE软件开发解决方案
2.Spring的核心:
IoC: 控制反转
AOP: 面向切面编程
3.Spring 体系结构
这个不好记我们可以根据Spring的官方文档去记忆
Spring官方文档截图:
目录如下:
第一章 Spring框架概述
第二章 Spring3.x 新特性
第三章核心技术(IoC、AOP、测试)
第四章数据访问(事务管理、 JdbcTemplate使用、整合其它ORM框架)
第五章 web技术(SpringMVC)
第六章集成(WebService、 JavaMail、JMS、任务调度、缓存)
从官网下下载的开发包有两个:
一个是spring-framework-3.2.0.RELEASE-dist.zip(依赖包)
一个是spring-framework-3.0.2.RELEASE-dependencies.zip(开发包)
我们用的是开发包
解压后的目录如下:
每个文件的作用:
Docs 文档目录(API 和 规范)
Libs 开发需要jar包(包含javadoc和source)
Schema 所有约束文档
4.导入Jar包到项目中
要进行Ioc开发和DI开发的话,需要导入最核心的Spring的jar包。需要导入四个核心的jar包,进入spring-framework-3.0.2.RELEASE-dependencies解压文件夹。找到以下四个jar包。
我们为了有Spring的日志功能,需要导入commons-logging的日志包以及log4j包(日志功能需要commons-logging和log4j一起用,注意, commons-logging 要配合log4j 记录日志,必须把log4j的jar 包也导入到项目中)这两个包jar包不在spring-framework-3.0.2.RELEASE-dependencies包(开发包)中,而是在spring-framework-3.2.0.RELEASE-dist.zip(依赖包)中。然后把log4j.properties这个文件拷贝到src目录下。
log4j.properties的内容如下:
### direct log messages to stdout ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### direct messages to file mylog.log ### log4j.appender.file=org.apache.log4j.FileAppender log4j.appender.file.File=c:/mylog.log log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### set log levels - for more verbose logging change ‘info‘ to ‘debug‘ ### log4j.rootLogger=info, stdout
项目整体的结构如下所示:
测试后就会输出日志,
Spring 框架 第一天 IoC
今天核心内容:
1、Spring框架相关知识 (什么是Spring? 解决什么问题? 课程如何安排)
2、Spring Ioc和DI 快速入门案例
3、Spring XML 容器工厂配置
4、Spring 注解配置
5、在web项目中集成Spring框架
6、Spring和Junit整合完成测试
Spring是分层的JavaSE/EE full-stack(一站式) 轻量级开源框架
n 分层: 来自JavaEE体系结构 (客户端层、 web层、业务层、持久层 )
服务器端三层结构 (web层、业务层、持久层)
Servlet + JSP ---- web层技术 ---- Struts2框架
JDBC 接口 ---- 持久化技术 ---- Hibernate框架
EJB 框架(复杂) ---- 业务层技术 ---- Spring 框架 (取代EJB出现 )
Spring 出现,就是为了解决常见JavaEE 企业开发问题!
n 一站式: Spring框架提供了 web层(表现层) SpringMVC、业务层 IoC、AOP和事务管理、持久层JdbcTemplate 各层javaEE软件开发解决方案
n 轻量级:相对于EJB框架而言
IoC: 控制反转
AOP: 面向切面编程
l 官网:http://www.springsource.org/
方便解耦,简化开发 (Spring IoC特性)
AOP编程的支持
声明式事务的支持
方便程序的测试
方便集成各种优秀框架 (整合Struts2 、 Hibernate 、MyBatis 、Struts1 )
降低JavaEE API的使用难度 (Spring 提供大量工具类, 简化代码编写 )
从Spring规范文档 去记忆 Spring 中内容
Spring规范
第一章 Spring框架概述
第二章 Spring3.x 新特性
第三章核心技术(IoC、AOP、测试)
第四章数据访问(事务管理、 JdbcTemplate使用、整合其它ORM框架)
第五章 web技术(SpringMVC)
第六章集成(WebService、 JavaMail、JMS、任务调度、缓存)
课程安排:
第一天: Spring IOC 、web集成、 测试
第二天: Spring AOP、JdbcTemplate
第三天: 事务管理, 整合ORM框架(三大框架整合 )
IoC和DI 是整合Spring学习的核心
http://projects.spring.io/spring-framework/ 网址下载开发包
最新版本4.1 课程 3.2
开发包3.2
spring-framework-3.2.0.RELEASE-dist.zip
依赖吧 3.0 (常见开源技术jar包)
spring-framework-3.0.2.RELEASE-dependencies.zip
Spring目录结构
Docs 文档目录(API 和 规范)
Libs 开发需要jar包(包含javadoc和source)
Schema 所有约束文档
进行Ioc和DI的开发,只需要导入最核心spring的jar包
Spring运行,使用commons-logging日志技术
(commons-logging 和 slf4j 都属于统一日志接口, 整合log4j日志实现 )
导入log4j jar
什么是IoC ? 什么是DI ? 区别是什么?
IoC: 控制反转, 解决程序对象紧密耦合问题(工厂+反射+ 配置文件), 将程序中原来构造对象的权限,交给IoC容器来构造,当程序需要对象,找IoC容器获取。
DI : 依赖注入 , IoC容器需要为程序提供依赖对象,返回对象所依赖对象一同可以提供(Servlet需要Service, 找Ioc容器获取Service, Service由容器提供,Service依赖DAO ,IoC容器提供Service对象同时, 将Service依赖DAO 注入到Service中)
IoC容器到底为程序提供了什么?提供依赖对象
测试代码 :
表现层代码
业务层代码
(spring配置文件 通常可以在src 或者 WEB-INF目录下, 通常名称 applicationContext.xml )
参考文档 : xsd-config.html
配置本地schema位置
通过applicationContext.xml 配置Spring管理对象
在程序中通过ApplicationContext接口 获取spring工厂对象
n ClassPathXmlApplicationContext 读取 src下配置文件
n FileSystemXmlApplicationContext 读取WEB-INF下配置文件
IoC 通过工厂,从Spring容器获取创建好对象
DI 在通过工厂获取,spring对象时,spring同时提供对象所依赖的对象
配置
练习: 在代码上,将UserDAO 注入到 UserService
BeanFactory 和 ApplicationContext 接口
ApplicationContext 是 BeanFactory 子接口,BeanFactory 才是Spring框架最核心工厂接口。
ApplicationContext 是对BeanFactory 接口扩展, 企业开发很少直接使用BeanFactory
ApplicationContext 会在容器初始化时,对其中管理Bean对象进行创建, BeanFactory 会在对象获取时才进行初始化 。
方式一: 使用类构造器实例化对象
<!-- 方式一 使用构造器(无参数)实例化对象 -->
<bean id="bean1"
class="cn.itcast.spring.b_instance.Bean1" />
方式二: 使用静态工厂 静态方法,对对象实例化
<!-- 方式二使用静态工厂实例化对象 -->
<!-- 调用工厂的 factory-method 返回对象 -->
<bean id="bean2"
class="cn.itcast.spring.b_instance.Bean2Factory" factory-method="getBean2" />
方式三: 使用实例工厂 实例方法 对对象实例化
<!-- 方式三使用实例工厂实例化对象 -->
<!-- 先实例化工厂 -->
<bean id="bean3Factory" class="cn.itcast.spring.b_instance.Bean3Factory" />
<!-- 再通过工厂对象的实例方法,构造目标对象 -->
<bean id="bean3" factory-bean="bean3Factory"
factory-method="getBean3" />
应用场景: 大多数情况,可以通过构造器直接实例化, 只有在对象构造过程非常复杂的情况下,才会采用工厂实例化的方式
Spring为Bean对象,提供五种作用域
最常用 singleton 和 prototype 两种
Singleton (单例): 在一个BeanFactory对象中,引用唯一的一个目标实例
Prototype (多例): 每次通过工厂执行getBean时,返回不同实例对象
Request (请求范围) : 创建对象保存在request范围,如果request销毁,对象销毁
Session (会话范围):创建对象保存Session中,如果session销毁,对象销毁
* globalSession (全局会话):分布式系统,全局会话的概念,一次登录,应用多个系统
单例Bean 在容器初始化时,实例化 (只实例化一次 )
多例Bean 在工程执行getBean时 才会实例化 (每调用一次,返回不同对象 )
可以通过 init-method属性配置 Bean对象初始化执行方法,destory-method属性配置Bean对象销毁的方法
(初始化方法和构造方法 有区别? 构造方法作用申请空间,为对象基本属性初始化 , 初始化方法 对象复杂构造过程 , java语言建议将对象复杂构造过程单独抽取 初始化方法 )
配置
在对象构造后,立即执行初始化init , 默认没有执行destroy 销毁方法
在Spring构造Bean对象过程中,有一个环节对Bean对象进行 后处理操作 (钩子函数) ----- Spring 提供 BeanPostProcessor 接口
可以自定义类,实现 BeanPostProcessor 接口,配置到Spring容器中,在构造对象时,spring容器会调用接口中方法
后处理器,在对象构造过程中,提供代理, 是AOP自动代理核心 !
三种注入方式
1、 构造参数属性注入
2、 setter方法属性注入
3、 接口属性注入
Spring 配置文件支持构造参数属性注入和 setter方法属性注入!
通过constructor-arg 属性进行构造参数注入
在配置文件 使用<property> 元素完成setter属性注入
【知识点】 p名称空间的使用
P名称空间,在spring2.5版本后引入,为了简化属性依赖注入(setter方法)
第一步: 在配置文件,引入p名称空间
第二步: 简化setter方法注入配置
【知识点】 spEL表达式的使用
在spring3.0之后,引入spEL 表达式语言,简化属性注入
参考 “Spring_表达式语言.pdf” 学习
语法: #{表达式}
用法一: 直接通过value注入,引用一个Bean对象
用法二: 引用一个Bean对象属性
用法三: 直接调用对象的方法
Spring为每种集合都提供一个元素标签 进行注入
Spring注解开发需要jar包 和 xml开发 一样的 !
第一步: 新建项目, 导入jar包
第二步: 在需要spring创建对象类上面 添加@Component (注解 来自spring2.5 )
第三步: 配置注解Bean所在package
引入context命名空间
配置提示
配置注解对象所在包
Spring为了细分组件的功能,在提供@Component注解,提供三个等价的注解
@Controller 控制器,表示web层组件 ---- action
@Service 业务类,表示业务层组件 --- service
@Repository 表示持久层的组件 --- dao
在spring2.5 版本,没有提供基本类型属性注入 ,但是spring3.0引入注解@Value
n spring2.5 提供自动装配注解 @Autowired
@Autowired 默认按照类型进行注入 (缺点: 如果容器中存在两个对象,是相同类型, @Autowired 无法注入 )
@Autowired + @Qualifier 指定注入Bean的id
n Spring支持JSR-250规范,引入@Resource ,功能和@Autowired 相同
重点记忆: @Autowired 和 @Resource
@PostConstruct 初始化
@PreDestroy 销毁
通过@Scope注解指定作用
Bean定义配置,使用配置文件方式
Bean关系依赖注入,使用注解配置方式
如果在配置使用 context:component-scan 具有 context:annotation-config 效果
如果Bean是通过xml配置,想使用注解依赖注入,必须单独配置
<context:annotation-config />
直接在项目集成spring ,在servlet 创建Spring容器
问题: 每次请求都会创建一个spring容器对象,将容器管理对象都重新创建
---- 性能问题、 内存溢出
解决: 在一个web容器中, 保证spring容器只被初始化一次
1) static --- 问题: 违背面向对象
2) servlet init 方法中 ---- 问题: spring容器对象如何被其它Servlet访问
3) ServletContext 容器保存数据唯一, ServletContextListener 初始化时容器方法只被调用一次
Spring 提供 web.jar 提供类似Listener
第一步: 在项目导入 spring-web-3.2.0.RELEASE.jar
第二步: 在web.xml 配置监听器
<!-- 监听器,初始化Spring容器对象 -->
<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
默认加载 /WEB-INF/applicationContext.xml
第三步: 配置spring文件位置
<!-- 修改spring配置文件位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
第四步:修改Servlet代码
// 1、创建工厂
ApplicationContext applicationContext =
(ApplicationContext) this.getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
上面代码也可以写为
ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
传统测试
Spring和junit测试集成
第一步:在项目导入spring-test-3.2.0.RELEASE.jar
第二步:编写测试类
作业:
1、 ssh整合登陆练习(步骤参考笔记)
2、通过BeanPostProcessor 对业务层接口进行代理,将登陆方法执行时间,记录log4j日志文件
01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能
标签:
原文地址:http://www.cnblogs.com/shenxiaoquan/p/5704405.html