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业务层 IoCAOP和事务管理、持久层JdbcTemplate  各层javaEE软件开发解决方案

2.Spring的核心:

 

IoC 控制反转

AOP 面向切面编程

3.Spring 体系结构

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

这个不好记我们可以根据Spring的官方文档去记忆

Spring官方文档截图:

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

目录如下:

 

   第一章 Spring框架概述

  第二章 Spring3.x 新特性

  第三章核心技术IoCAOP、测试)

  第四章数据访问(事务管理、 JdbcTemplate使用、整合其它ORM框架)

  第五章 web技术SpringMVC

  第六章集成WebService JavaMailJMS任务调度、缓存

 

 

从官网下下载的开发包有两个:

    一个是spring-framework-3.2.0.RELEASE-dist.zip(依赖包)

         一个是spring-framework-3.0.2.RELEASE-dependencies.zip(开发包)

我们用的是开发包

解压后的目录如下:

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

 

 

 

每个文件的作用:

Docs 文档目录(API 规范)

Libs 开发需要jar包(包含javadocsource

Schema 所有约束文档

4.导入Jar包到项目中

要进行Ioc开发和DI开发的话,需要导入最核心的Spring的jar包。需要导入四个核心的jar包,进入spring-framework-3.0.2.RELEASE-dependencies解压文件夹。找到以下四个jar包。

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

我们为了有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

项目整体的结构如下所示:

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

测试后就会输出日志,

 

 

 

 

 

 

 

 

Spring 框架 第一天 IoC

今天核心内容:

1Spring框架相关知识 (什么是Spring 解决什么问题? 课程如何安排)

2Spring IocDI 快速入门案例

3Spring XML 容器工厂配置

4Spring 注解配置

5、在web项目中集成Spring框架

6SpringJunit整合完成测试

 

1.1.   什么是Spring

Spring是分层的JavaSE/EE full-stack(一站式) 轻量级开源框架

n  分层: 来自JavaEE体系结构 (客户端层、 web层、业务层、持久层

服务器端三层结构 web层、业务层、持久层)

       Servlet + JSP ----  web层技术 ---- Struts2框架

       JDBC 接口 ---- 持久化技术  ---- Hibernate框架

       EJB 框架(复杂) ---- 业务层技术 ---- Spring 框架 (取代EJB出现

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

Spring 出现,就是为了解决常见JavaEE 企业开发问题

n  一站式: Spring框架提供了 web层(表现层) SpringMVC业务层 IoCAOP和事务管理、持久层JdbcTemplate  各层javaEE软件开发解决方案

n  轻量级:相对于EJB框架而言

1.2.   Spring核心

IoC 控制反转

AOP 面向切面编程

l  官网:http://www.springsource.org/

 

1.3.   Spring 给软件开发带来了什么

方便解耦,简化开发 Spring IoC特性)

AOP编程的支持

声明式事务的支持

方便程序的测试

方便集成各种优秀框架 (整合Struts2 Hibernate MyBatis Struts1

降低JavaEE API的使用难度 Spring 提供大量工具类, 简化代码编写

 

1.4.   Spring 体系结构

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

Spring规范文档 去记忆 Spring 中内容

Spring规范

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

第一章 Spring框架概述

第二章 Spring3.x 新特性

第三章核心技术IoCAOP、测试)

第四章数据访问(事务管理、 JdbcTemplate使用、整合其它ORM框架)

第五章 web技术SpringMVC

第六章集成WebService JavaMailJMS任务调度、缓存

 

课程安排:

       第一天: Spring IOC web集成、 测试

       第二天: Spring AOPJdbcTemplate

       第三天: 事务管理, 整合ORM框架(三大框架整合

2.    Spring框架IoCDI 快速入门

IoCDI 是整合Spring学习的核心

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

2.1.   下载开发包

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目录结构

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

Docs 文档目录(API 规范)

Libs 开发需要jar包(包含javadocsource

Schema 所有约束文档

2.2.   导入jar包到项目

进行IocDI的开发,只需要导入最核心springjar

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

Spring运行,使用commons-logging日志技术

       commons-logging slf4j 都属于统一日志接口, 整合log4j日志实现

导入log4j jar

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

2.3.   理解IoCDI的概念

什么是IoC 什么是DI 区别是什么?

IoC 控制反转, 解决程序对象紧密耦合问题(工厂+反射+ 配置文件), 将程序中原来构造对象的权限,交给IoC容器来构造,当程序需要对象,找IoC容器获取。

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

 

DI 依赖注入 IoC容器需要为程序提供依赖对象,返回对象所依赖对象一同可以提供(Servlet需要Service Ioc容器获取Service Service由容器提供,Service依赖DAO IoC容器提供Service对象同时, Service依赖DAO 注入到Service中)

       IoC容器到底为程序提供了什么?提供依赖对象

 

2.4.   编写IoCDI入门案例

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

2.4.1.    传统代码 

       测试代码

       01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

       表现层代码

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

       业务层代码

       01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

 

2.4.2.    将所有对象,交给IoC容器(Spring)来管理

       spring配置文件 通常可以在src 或者 WEB-INF目录下, 通常名称 applicationContext.xml

       参考文档 xsd-config.html

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

配置本地schema位置

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

 

通过applicationContext.xml 配置Spring管理对象

 

在程序中通过ApplicationContext接口 获取spring工厂对象

n  ClassPathXmlApplicationContext 读取 src下配置文件

n  FileSystemXmlApplicationContext 读取WEB-INF下配置文件

IoC 通过工厂,从Spring容器获取创建好对象

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

DI 在通过工厂获取,spring对象时,spring同时提供对象所依赖的对象

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

配置

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

练习: 在代码上,将UserDAO 注入到 UserService 

2.5.   Spring提供对象工厂

BeanFactory ApplicationContext 接口

       ApplicationContext BeanFactory 子接口,BeanFactory 才是Spring框架最核心工厂接口。

       ApplicationContext 是对BeanFactory 接口扩展, 企业开发很少直接使用BeanFactory

       ApplicationContext 会在容器初始化时,对其中管理Bean对象进行创建, BeanFactory 会在对象获取时才进行初始化

 

3.    IoC容器装配Beanxml配置)

3.1.   三种实例化Bean的方式

方式一: 使用类构造器实例化对象

<!-- 方式一  使用构造器(无参数)实例化对象  -->

   <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" />

 

应用场景: 大多数情况,可以通过构造器直接实例化, 只有在对象构造过程非常复杂的情况下,才会采用工厂实例化的方式

 

3.2.   Bean的作用域

SpringBean对象,提供五种作用域

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

最常用 singleton prototype 两种

       Singleton (单例): 在一个BeanFactory对象中,引用唯一的一个目标实例

       Prototype (多例): 每次通过工厂执行getBean时,返回不同实例对象

       Request (请求范围) : 创建对象保存在request范围,如果request销毁,对象销毁

       Session (会话范围):创建对象保存Session中,如果session销毁,对象销毁

       * globalSession (全局会话:分布式系统,全局会话的概念,一次登录,应用多个系统

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

单例Bean 在容器初始化时,实例化 (只实例化一次

多例Bean 在工程执行getBean 才会实例化 (每调用一次,返回不同对象

3.3.   Bean的生命周期

可以通过 init-method属性配置 Bean对象初始化执行方法,destory-method属性配置Bean对象销毁的方法

       (初始化方法和构造方法 有区别? 构造方法作用申请空间,为对象基本属性初始化 初始化方法 对象复杂构造过程 java语言建议将对象复杂构造过程单独抽取 初始化方法

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

配置

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

       在对象构造后,立即执行初始化init 默认没有执行destroy 销毁方法

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

3.4.   后处理器(后处理Bean--- 补充

Spring构造Bean对象过程中,有一个环节对Bean对象进行 后处理操作 (钩子函数) ----- Spring 提供 BeanPostProcessor 接口

       可以自定义类,实现 BeanPostProcessor 接口,配置到Spring容器中,在构造对象时,spring容器会调用接口中方法

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

 

后处理器,在对象构造过程中,提供代理, AOP自动代理核心

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

3.5.   Bean的依赖注入

3.5.1.    依赖注入方式

三种注入方式

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

1 构造参数属性注入

2 setter方法属性注入

3 接口属性注入

 

Spring 配置文件支持构造参数属性注入 setter方法属性注入

3.5.2.    构造参数的属性输入

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

通过constructor-arg 属性进行构造参数注入

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

3.5.3.    setter方法属性注入

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

在配置文件 使用<property> 元素完成setter属性注入

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

3.5.4.    属性注入深入

【知识点】 p名称空间的使用

       P名称空间,在spring2.5版本后引入,为了简化属性依赖注入(setter方法)

第一步: 在配置文件,引入p名称空间

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

第二步: 简化setter方法注入配置

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

 

【知识点】 spEL表达式的使用

       spring3.0之后,引入spEL 表达式语言,简化属性注入

       参考 Spring_表达式语言.pdf 学习

       语法: #{表达式}

用法一: 直接通过value注入,引用一个Bean对象

用法二: 引用一个Bean对象属性

用法三: 直接调用对象的方法

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

3.5.5.    集合元素类型属性注入

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

Spring为每种集合都提供一个元素标签 进行注入

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

 

4.    IoC容器装配Bean(注解配置)

4.1.   使用注解配置Bean

Spring注解开发需要jar xml开发 一样的

第一步: 新建项目, 导入jar

第二步: 在需要spring创建对象类上面 添加@Component (注解 来自spring2.5

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

第三步: 配置注解Bean所在package

引入context命名空间

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

配置提示

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

配置注解对象所在包

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

 

Spring为了细分组件的功能,在提供@Component注解,提供三个等价的注解

       @Controller 控制器,表示web层组件  ---- action

       @Service 业务类,表示业务层组件 --- service

       @Repository 表示持久层的组件 --- dao

4.2.   Bean属性依赖注入

spring2.5 版本,没有提供基本类型属性注入 ,但是spring3.0引入注解@Value

4.2.1.    向对象注入基本类型属性

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

4.2.2.    向对象注入复杂对象属性

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

4.2.3.    spring2.5 注入复杂对象属性

n  spring2.5 提供自动装配注解 @Autowired

@Autowired 默认按照类型进行注入 (缺点: 如果容器中存在两个对象,是相同类型, @Autowired 无法注入

       @Autowired + @Qualifier 指定注入Beanid

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

 

n  Spring支持JSR-250规范,引入@Resource ,功能和@Autowired 相同

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

重点记忆: @Autowired @Resource

4.3.   Spring注解其它配置

4.3.1.    初始化和销毁方法配置

@PostConstruct 初始化

@PreDestroy 销毁

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

4.3.2.    bean的作用域

通过@Scope注解指定作用

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

4.3.3.    注解和配置文件混合使用

Bean定义配置,使用配置文件方式

Bean关系依赖注入,使用注解配置方式

       如果在配置使用 context:component-scan 具有 context:annotation-config 效果

 

如果Bean是通过xml配置,想使用注解依赖注入,必须单独配置

       <context:annotation-config />

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

5.    web开发中应用Spring框架

直接在项目集成spring ,在servlet 创建Spring容器

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

问题: 每次请求都会创建一个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());

6.    springjunit的测试集成

传统测试

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

Springjunit测试集成

第一步:在项目导入spring-test-3.2.0.RELEASE.jar

第二步:编写测试类

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

 

作业:

       1 ssh整合登陆练习(步骤参考笔记)

       2通过BeanPostProcessor 对业务层接口进行代理,将登陆方法执行时间,记录log4j日志文件

 

 

 

相关文章:

  • 2021-06-20
  • 2021-12-22
  • 2021-11-25
  • 2021-07-14
  • 2021-09-14
  • 2021-10-12
  • 2022-12-23
  • 2022-01-15
猜你喜欢
  • 2021-06-12
  • 2021-06-11
  • 2022-01-26
  • 2021-11-13
  • 2021-12-14
  • 2021-08-22
  • 2022-12-23
相关资源
相似解决方案