SE/EE开发的一站式框架------->有EE开发的每一层解决方案。
WEB层 :SpringMVC
Service层 :Spring的Bean管理,Spring声明式事务
DAO层 :Spring的Jdbc模板,Spring的ORM模块
一、特点
方便解耦,简化开发
通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。
AOP编程的支持
通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。
声明式事务的支持
在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
方便程序的测试
可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里 ,测试不再是昂贵的操作,而是随手可做的事情。例如: Spring对Junit4支持,可以通过注解方便的测试Spring程序。
方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度, Spring提供 了对各种优秀框架(如Struts, Hibernate、Hessian、 Quartz) 等的直接支持。
降低Java EE API的使用难度
Spring对很多难用的Java EE API (如JDBC, JavaMail, 远程调用等)提供了- -个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大为降低。
二、Spring的两大特征
IOC
在任何一个有实际开发意义的程序项目中,我们会使用很多类来描述它们特有的功能,并且通过类与类之间的相互协作来完成特定的业务逻辑。这个时候,每个类都需要负责管理与自己有交互的类的引用和依赖,代码将会变的异常难以维护和极度的高耦合。而IOC的出现正是用来解决这个问题,我们通过IOC将这些相互依赖对象的创建、协调工作交给Spring容器去处理,每个对象只需要关注其自身的业务逻辑关系就可以了。在这样的角度上来看,获得依赖的对象的方式,进行了反转,变成了由spring容器控制对象如何获取外部资源(包括其他对象和文件资料等等)
AOP
面向切面编程,往往被定义为促使软件系统实现关注点的分离的技术。系统是由许多不同的组件所组成的,每一个组件各负责一块特定功能。除了实现自身核心功能之外,这些组件还经常承担着额外的职责。例如日志、事务管理和安全这样的核心服务经常融入到自身具有核心业务逻辑的组件中去。这些系统服务经常被称为横切关注点,因为它们会跨越系统的多个组件。通过AOP简化了代码的内容,将目标对象复杂的内容进行解耦,分离业务逻辑与横切关注点。
深入理解Spring的两大特征
三、ApplicationContext
加载配置文件的时候,就会将Spring管理的类都实例化。 //BeanFactory 调用getBean的时候,才会生成类的实例
ApplicationContext applicationContext =new ClassPathXmlApplicationContext(“applicationContext .xml”)
//加载类路径下的配置文件
xxDao=(XXDao)applicationContext .getBean("xxDao");
四、Bean的作用范围 scope
singleton :默认的,Spring会采用单例模式创建这个对象。
prototype :多例模式。(Struts2和Spring整合一定会用到)
request :应用在web项目中,Spring创建这个类以后,将这个类存入到request范围中。
session :应用在web项目中,Spring创建这个类以后,将这个类存入到session范围中。
globalsession :应用在web项目中,必须在porlet环境下使用。但是如果没有这种环境,相对于session。
五、Spring的属性注入
1、构造方法
2、set方法
3、P名称空间 (Spring2.5以后)
4、SpEL (Spring3.0以后)
Spring Expression Language,Spring的表达式语言
5、集合类型属性注入
六、Spring的IOC的注解方式
配置包扫描
//execution表达式:指定増強的方法
九、Spring的AOP开发:注解方式
AspectJ的AOP的注解:
@Aspect :定义切面类的注解
通知类型:
- @Before:前置通知
- @AfterReturing:后置通知:
- @Around:环绕通知
- @After:最终通知
- @AfterThrowing:异常抛出通知
@Pointcut:定义切入点的注解
1、编写并配置目标类
2、开启aop注解的自动代理:
3、定义切面类
@Aspect
public class MyAspectAnno(
@Before ("MyAspectAnno.pointcut1()")
public void before(){
System.out.println("前置通知=====");
}
@Pointcut ("execution(* cn. itcast. spring. demo4. ProductDao.save(..))")
private void pointcut1(){}
4、配置切面
十、Spring的声明式事务管理
Spring的声明式事务
声明式事务管理(XML):思想是AOP
1、配置事务管理器
2、配置事务的通知
3、配置AOP事务
声明式事务管理(注解方式)
1、配置事务管理器
2、开启事务管理的注解
3、在使用事务的类上添加一个注解:@Transational
@Transational
class XXXXServiceImpl extends XXXXService{
......................
}