码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-07-25 18:17:26      阅读:1264      评论:0      收藏:0      [点我收藏+]

标签:

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 体系结构

技术分享

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

Spring官方文档截图:

技术分享

目录如下:

 

   第一章 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(开发包)

我们用的是开发包

解压后的目录如下:

技术分享

 

 

 

每个文件的作用:

Docs 文档目录(API 规范)

Libs 开发需要jar包(包含javadocsource

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

今天核心内容:

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

2Spring IocDI 快速入门案例

3Spring XML 容器工厂配置

4Spring 注解配置

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

6SpringJunit整合完成测试

 

1.    Spring 框架概述

1.1.   什么是Spring

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

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

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

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

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

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

技术分享

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 体系结构

技术分享

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

Spring规范

技术分享

第一章 Spring框架概述

第二章 Spring3.x 新特性

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

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

第五章 web技术SpringMVC

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

 

课程安排:

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

       第二天: Spring AOPJdbcTemplate

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

2.    Spring框架IoCDI 快速入门

IoCDI 是整合Spring学习的核心

技术分享

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

技术分享

Docs 文档目录(API 规范)

Libs 开发需要jar包(包含javadocsource

Schema 所有约束文档

2.2.   导入jar包到项目

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

技术分享

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

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

导入log4j jar

技术分享

2.3.   理解IoCDI的概念

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

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

技术分享

 

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

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

 

2.4.   编写IoCDI入门案例

技术分享

2.4.1.    传统代码 

       测试代码

       技术分享

       表现层代码

技术分享

       业务层代码

       技术分享

 

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

       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 

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对象,提供五种作用域

技术分享

最常用 singleton prototype 两种

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

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

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

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

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

技术分享

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

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

3.3.   Bean的生命周期

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

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

技术分享

配置

技术分享

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

技术分享

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

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

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

技术分享

 

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

技术分享

3.5.   Bean的依赖注入

3.5.1.    依赖注入方式

三种注入方式

技术分享

1 构造参数属性注入

2 setter方法属性注入

3 接口属性注入

 

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

3.5.2.    构造参数的属性输入

技术分享

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

技术分享

3.5.3.    setter方法属性注入

技术分享

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

技术分享

3.5.4.    属性注入深入

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

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

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

技术分享

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

技术分享

技术分享

 

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

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

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

       语法: #{表达式}

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

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

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

技术分享

技术分享

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

技术分享

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

技术分享

技术分享

技术分享

 

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

4.1.   使用注解配置Bean

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

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

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

技术分享

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

引入context命名空间

技术分享

配置提示

技术分享

配置注解对象所在包

技术分享

 

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

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

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

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

4.2.   Bean属性依赖注入

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

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

技术分享

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

技术分享

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

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

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

       @Autowired + @Qualifier 指定注入Beanid

技术分享

 

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

技术分享

重点记忆: @Autowired @Resource

4.3.   Spring注解其它配置

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

@PostConstruct 初始化

@PreDestroy 销毁

技术分享

4.3.2.    bean的作用域

通过@Scope注解指定作用

技术分享

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

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

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

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

 

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

       <context:annotation-config />

技术分享

5.    web开发中应用Spring框架

直接在项目集成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());

6.    springjunit的测试集成

传统测试

技术分享

Springjunit测试集成

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

第二步:编写测试类

技术分享

 

作业:

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

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

 

 

 

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

标签:

原文地址:http://www.cnblogs.com/shenxiaoquan/p/5704405.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!