Spring&SpringMVC
为什么要使用Spring
轻量:Spring 是轻量的,基本的版本大约 2MB。
控制反转:Spring 通过控制反转实现了松散耦合,对象们给出它们的依
赖,而不是创建或查找依赖的对象们。
面向切面的编程(AOP):Spring 支持面向切面的编程,并且把应用业务
逻辑和系统服务分开。
容器:Spring 包含并管理应用中对象的生命周期和配置。
MVC 框架:Spring 的 WEB 框架是个精心设计的框架,是 Web 框架的
一个很好的替代品。
事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地
事务下至全局事务(JTA)。
异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC,
Hibernate or JDO 抛出的)转化为一致的 unchecked 异常。
IOC
一种控制翻转的设计理念,通过将对象交给一个IOC容器进行管理,容器创建对象,
将它们装配在一起,配置它们并管理它们的完整生命周期。Spring 容器使用依赖注
入来管理组成应组件,此种模式的优点在于,可将精力集中到业务上,而不再创建、管理对象上。
//体会使用IOC管理对象便捷 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); UserService2 service2 = (UserService2) context.getBean("userService2"); service2.getUser();
DI(依赖注入)
DI是实现IOC理念 的一种方式,主要有set方式(提供set和get方法)和constractor(构造方法)方式,它使得类与类之间以配置文件的形式组织在一起,而不是硬编码的方式,例如classA 中用到了classB如果写代码的话是new 一个classB,而用依赖注入的方式则是在applicationContext.xml里面写两个
<bean id="id1" class="A"><property name="B" ref="id2"></bean>
<bean id="id2" class="B"></bean>,就是在类A里原来需要new 的地方就不需要写了
AOP(面向切面编程)
将业务代码,与非业务代码进行了分离,以横向编程的方式,在业务代码中插入一些非业务指令,在不改变原业务代码的情况下插入一些,如日志等的功能。
1、横切关注点
对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点
2、切面(aspect)
类是对物体特征的抽象,切面就是对横切关注点的抽象
3、连接点(joinpoint)
被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器
4、切入点(pointcut)
对连接点进行拦截的定义
5、通知(advice)
所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类
6、目标对象
对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点
2、切面(aspect)
类是对物体特征的抽象,切面就是对横切关注点的抽象
3、连接点(joinpoint)
被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器
4、切入点(pointcut)
对连接点进行拦截的定义
5、通知(advice)
所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类
6、目标对象
示例,通过xml配置方式使用AOP
<!-- 方式一:使用原生spring API接口 --> <!-- 配置aop 需要导入aop约束--> <aop:config> <!-- 切入点 --> <aop:pointcut id="pointcut" expression="execution(* com.twilight.service.UserServiceImpl.*(..))"/> <!-- 执行环绕增加 --> <aop:advisor advice-ref="log" pointcut-ref="pointcut"/> <aop:advisor advice-ref="afterLog" pointcut-ref="pointcut"/> </aop:config> <!-- 方式二:自定义实现AOP --> <bean id="diy" class="com.twilight.diy.DiyPointCut"/> <aop:config> <!-- 定义切面,ref要用应用的类 --> <aop:aspect ref="diy"> <!-- 切点 --> <aop:pointcut id="pointcut" expression="execution(* com.twilight.service.UserServiceImpl.*(..))"/> <!-- 通知 --> <aop:before method="before" pointcut-ref="pointcut"/> <aop:after method="after" pointcut-ref="pointcut"/> </aop:aspect>
通过注解使用AOP
@Component @Aspect public class AnnotationPointCut { @Before("execution(* com.twilight.service.UserServiceImpl.*(..))") public void before(){ System.out.println("=========== anno 执行任务前 ============="); } @After("execution(* com.twilight.service.UserServiceImpl.*(..))") public void after(){ System.out.println("=========== anno 执行任务后 ============="); } }
优点:
降低了模块间的耦合度
是系统容易扩展
非业务代码更加集中,不分散,便于统一管理
业务代码更加纯粹,不掺杂其他代码影响
spring主要有哪些模块
- web模块
- AOP模块
- Test
- 数据访问/集成 – 该层提供与数据库交互的支持。它包含以下模块:
- JDBC (Java DataBase Connectivity)
- ORM (Object Relational Mapping)
- OXM (Object XML Mappers)
- Spring 核心容器 – 该层基本上是 Spring Framework 的核心。它包含以下模块:
- Spring Core
- Spring Bean
- SpEL (Spring Expression Language)
- Spring Context
Spring常用的注入方式
提供set和get方法)和constractor(构造方法)方式
Spring中bean的作用域
单例模式(singleton)IOC默认:IOC容器中的bean只能被get一次,其余get到的都是相同的对象
原型模式(prototype ):IOC容器的bean可以被get多次,每次get的为不同对象
其他模式(requset session application)这些作用域只在web开发中生效
spring事务实现的方式
commit()、rollback()

浙公网安备 33010602011771号