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、目标对象
示例,通过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()
 
posted @ 2020-09-08 16:45  TwilightDF  阅读(109)  评论(0)    收藏  举报