当前位置:文档之家› Spring总结

Spring总结

Spring总结
Spring总结

------------------------------Spring重点总结------------------------------

一、了解Spring框架作用和优点

1)Spring框架的作用及优点

a.作用

Spring框架主要用于与其他技术(struts,hibernate等)进行整合,

可将应用程序中的Bean组件实现低耦合关联.最终可以提高系统扩展

和维护性.

b.优点

将来我们利用Spring框架管理系统的各个组件(Action,Service,DAO)

.采用Spring的IOC和AOP机制实现各组件的关联.从而实现了低耦合调用.增强了系统可维护性和扩展性.

总结:利用Spring框架和Struts2,Hibernate整合,利用它的IOC和AOP机制来管理组件,实现组件解耦

二、掌握Spring框架对Bean组件管理

1.Spring框架容器的基本使用

Spring框架的核心是提供了一个容器,该容器可以对Bean组件进行管理,例如创建Bean对象,销毁一个Bean对象等操作.此外该容器还具有IOC和AOP高级特性,将Bean对象调用解耦.

*1)Spring容器配置

创建工程,在src下引入applicationContext.xml配置文件,并添加spring-ioc开发包.

在applicationContext.xml中声明定义Bean组件格式:

*2)Spring容器如何实例化

BeanFactory-->ApplicationContext(推荐)

ApplicationContext ac =

new ClassPathXmlApplicationContext("xml配置文件");

ac.getBean("标识符");//获取Bean组件对象

3)Spring容器如何管理Bean组件

*a)控制Bean组件对象的创建方式

元素利用scope属性.Spring可以控制Bean对象创建方式. 默认情况下scope 属性可以用singleton和prototype两种值.

singleton:采用单例方式创建(默认采用)

prototype:采用(原型)非单例方式创建

---------------------------------------------------

在以后Web环境中,scope还可以有几个扩展属性值.

request:将Bean对象与request对象绑定.

session:将Bean对象与session对象绑定.

---------------------------------------------------

b)Bean组件对象的创建时机

singleton模式:当实例化Spring容器时,会创建所有的单例对象.

可以在元素中使用lazy-init属性控制,将对

象创建时机延迟到第一次调用getBean方法.

prototype模式:在调用Spring容器的getBean方法时创建.

c)指定Bean组件对象创建后初始化和销毁处理方法

指定初始化方法:利用元素的init-method属性指定

指定销毁方法:利用元素的destroy-method属性指定.

该属性仅对scope="singleton"有效.

---------------------IOC和AOP在系统中的具体应用--------------------------

总结:

IOC:利用IOC机制实现组件之间调用,例如Service--->DAO

AOP:利用AOP机制实现共通的处理.例如事务,日志记录,异常处理等作用到所有Service组件方法上.

三、掌握IOC概念及其应用

1.IOC概念

IOC(Inverse of Controller) 指的是反向控制或控制反转.

Spring容器实现了IOC控制思想,实现原理采用的DI注入技术.

a.什么是DI?

Dependence Injection依赖注入.就是将被使用方的组件对象给

使用方传入.途径Spring提供了Setter方式和构造方式.

b.什么是IOC?

IOC被称为反向控制,更确切来讲应该是控制转移.

所谓的控制权一般指的是对象创建,初始化,关系指定,销毁等控制逻辑

IOC思想就是将控制权逻辑交给第三方(Spring容器)负责,负责对象创建,使用关系的建立,对象销毁等.

c.IOC和DI关系

Spring框架是通过DI技术实现了IOC控制思想.

2.IOC作用

例如采用Spring的IOC机制实现UserService调用UserDAO

1)需要将UserService和UserDAO交给Spring容器

2)在UserService中采用注入方式使用UserDAO

在UserService一方添加UserDAO属性定义和setter方法

在业务方法中删除new UserDAO代码.

3)在UserService组件定义中,指定setter注入配置

--------------------------------------------------

public class A{

public String _name;

public void setName(){

}

public String getName(){

}

}

//成员变量_name

//属性是name

四、掌握AOP概念及其应用

1.什么是AOP?

Aspect Orentied Programming (AOP,面向方面编程)

Object Orentied Programming (OOP,面向对象编程)

AOP编程是以OOP为基础,OOP侧重点是对象抽象和封装,

AOP侧重点是共通处理部分的封装和使用.用于改善共通组件

和目标组件之间的关系(低耦合)

2.AOP使用示例

------AOP示例操作步骤------

a.引入Spring-AOP的开发包.

b.首先编写一个方面组件,将共通处理封装.

c.然后在Spring容器配置中添加AOP定义

--将方面组件Bean定义,采用指定为方面组件

--采用指定切入点,确定目标对象

--采用通知指定方面组件和目标对象方法的作用时机.

3.AOP相关概念

*a.Aspect(方面组件)

方面组件就是封装共通处理逻辑的组件,其功能将来要作用到某一批目标方法上.例如日志记录,异常处理,事务处理等

*b.PointCut(切入点)

切入点是用于指定目标对象或方法的一个表达式.

切入点表达式用于指定哪些对象和方法调用方面功能.

*1)方法限定表达式

execution(修饰符? 返回类型方法名(参数) throws 异常类型? )

示例1--匹配所有Bean对象中以add开头的方法

execution(* add*(..))

示例2--匹配UserService类中所有的方法

execution(* https://www.doczj.com/doc/7c16981353.html,erService.*(..))

示例3--匹配UserService类中有返回值的所有方法

execution(!void https://www.doczj.com/doc/7c16981353.html,erService.*(..))

示例4--匹配所有Bean对象中修饰符为public,方法名为add的方法

execution(public * add(..))

示例5--匹配tarena.service包下所有类的所有方法

execution(* tarena.service.*.*(..))

示例6--匹配tarena.service包及其子包中所有类所有方法

execution(* tarena.service..*.*(..))

*2)类型限定

within(类型)

示例1--匹配UserService类中的所有方法

within(https://www.doczj.com/doc/7c16981353.html,erService)

示例2--匹配tarena.service包下所有类型的所有方法

within(tarena.service.*)

示例3--匹配tarena.service包及其子包中所有类型的所有方法

within(tarena.service..*)

3)Bean名称限定

bean(bean的id|name属性值)

元素定义的id或name值做匹配限定.

示例1--匹配容器中bean元素id="userService"对象

bean(userService)

示例2--匹配容器中所有id属性以Service结束的bean对象

bean(*Service)

4)参数列表限定

arg(参数类型)

示例--匹配有且只有一个String参数的方法

arg(https://www.doczj.com/doc/7c16981353.html,ng.String)

注意:上述表达式可以利用&&,||连接,形成更复杂的表达式.

c.JointPoint(连接点)

切入点是连接点的集合.指的是方面组件和目标组件作用的位置.例如方法调用,异常发生位置.

*d.Advice(通知)

用于指定方面组件在目标方法上作用的时机.例如在目标方法之前执行,目标方法之后执行,目标方法之前和之后执行等.

通知主要负责指定方面功能和目标方法功能的作用关系.

Spring框架提供了以下5种类型通知.

a. 前置通知

方面功能在目标方法之前调用.

b. 后置通知

方面功能在目标方法之后调用.目标方法无异常执行.

c. 最终通知

方面功能在目标方法之后调用.目标方法有无异常都执行

e. 异常通知

方面功能在目标方法抛出异常之后执行.

f. 环绕通知

方面功能在目标方法执行前和后调用.

try{

//环绕通知前置部分功能

//前置通知--执行方面功能

调用目标方法处理

//后置通知--执行方面功能

//环绕通知后置部分功能

}catch(){

//异常通知--执行方面功能

}finally{

//最终通知--执行方面功能

}

e.Target(目标对象)

要使用方面功能的组件对象.或被切入点表达式指定的对象

f.AutoProxy(动态代理对象)

Spring使用了AOP机制后,采用的是动态代理技术实现的.

当采用了AOP之后,Spring通过getBean返回的对象是一个动态代理类型对象.当使用该对象的业务方法时,该对象会负责调用方面组件和目标组件的功能.

如果未采用AOP,Spring通过getBean返回的是原始类型对象,因此执行的是原有目标对象的处理.

Spring动态代理技术采用的是以下两种:

--采用JDK Proxy API实现.(目标对象有接口定义)

--采用Cglib.jar工具包API实现.(目标对象没有接口定义)

4.AOP示例--异常处理的示例

try{

}catch(Exception e){

e.printStacktrace();//在服务器控制台打印异常堆栈信息

//记录异常信息

}

发生异常-->Struts-->error.jsp-->给用户看

----------------------------Log4j工具-----------------------------------

log4j工具主要是用于做日志信息的输出.

该工具由3部分重要组件构成,具体如下

Logger组件:日志器,提供了信息输出的操作方法.

Appender组件:输出器,提供了不同的输出方式.

Layout组件:布局器,提供了不同的信息输出格式

log4j在消息处理时,将消息分成若干个级别,具体如下

debug : 调试级别

info : 普通消息级别

warn : 警告级别

error : 错误级别

fatal : 致命级别

相关主题
文本预览
相关文档 最新文档