------------------------------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组件对象的创建方式
在
singleton:采用单例方式创建(默认采用)
prototype:采用(原型)非单例方式创建
---------------------------------------------------
在以后Web环境中,scope还可以有几个扩展属性值.
request:将Bean对象与request对象绑定.
session:将Bean对象与session对象绑定.
---------------------------------------------------
b)Bean组件对象的创建时机
singleton模式:当实例化Spring容器时,会创建所有的单例对象.
可以在
象创建时机延迟到第一次调用getBean方法.
prototype模式:在调用Spring容器的getBean方法时创建.
c)指定Bean组件对象创建后初始化和销毁处理方法
指定初始化方法:利用
指定销毁方法:利用
该属性仅对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组件
--------------------------------------------------
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属性值)
按
示例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 : 致命级别