spring小结

一、spring IOC

IOC:控制反转,将对象的创建交给spring容器来完成。
DI:依赖注入,对象依赖的属性由spring容器来注入。

  1、依赖包:beans、context、core、expression、commons-logging
  2、配置文件applicationContext.xml:

<bean id="helloWord" class="包名" scope="">    
    <property name="" value=""></property>
</bean>
//默认singleton:单例模式,IOC容器创建时创建bean实例,在整个IOC容器的生命周期中只有一个。 //prototype:原型模式。IOC容器初始化时不创建bean 的实例,在每次获取bean实例时创建。 //request:一个request创建一个实例。 //session:一个session创建一个实例。

  3、创建spring的IOC容器对象

ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml"); 

  4、从IOC容器中获取bean实例

HelloWorld helloWord=(HelloWorld)ctx.getBean("helloWord");

  5、导入外部属性文件

<context:property-placeholder location="classpath:db.properties"/>
//使用:${name}

  6、配置注解:指定IOC容器扫描的包。然后才可以在包名下的类使用注解。

<context:component-scan base-package="包名"></context:component-scan>

 

 

二、spring AOP

AOP:面向切面编程

  1、IOC配置、扫描注解配置、如上。
  2、基于注解的AOP配置:

<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

  3、切面是一个IOC的bean,需要@Component、@Aspect注解。
  4、切面类中声明方法,需要@Before、@After、@AfterReturning、@AfterThrowing、@Around
  5、如:

          @Before("execution(包名.类名.方法名)")//可用*作为通配符
      public void beforeMethod(JoinPoint joinPoint){
        String methodName = joinPoint.getSignature().getName();//获取目标方法的方法名
        List<Object> args = Arrays.asList(joinPoint.getArgs());//获取目标方法的方法参数
        System.out.println("the method " + methodName + " begins with " + args );
      }

  6、  前置通知:在目标方法执行前,执行的通知
    后置通知:在目标方法执行后(无论是否发生异常),执行的通知,不能访问目标方法的结果。
    返回通知:在目标方法正常结束后(发生异常后不执行),执行的通知,可以访问目标的结果。public void beforeMethod(JoinPoint joinPoint,Object result){}
    异常通知:在目标方法出现异常时才执行,可以访问到异常对象,且可以指定在出现特定异常时执行通知。public void beforeMethod(JoinPoint joinPoint,Exception ex){}
    环绕通知:需要携带ProceedingJoinPoint类型的参数,该参数可以决定目标方法是否执行。执行:pjp.proceed();环绕通知必须有返回值,返回值即为目标方法的返回值。
  7、切面类,可以用@Order(i)指定优先级,数值越小优先级越高。
  8、 定义一个方法,用于声明切入点表达式。一般的,该方法中不添加其他代码。
    使用@Pointcut来声明切入点表达式。
    后面的通知直接使用方法名来引用当前的切入点表达式即可。

      @Poincut("execution(包名.类名.方法名)")
      public void declareJointPoint(){}
      //使用:@Before(
"declareJointPoint()")



三、声明式事务

  1、配置事务管理器

<bean id="transactionManager" class="对应持久层的事务管理器类名">
  <property name="dataSource" ref="dataSource"></property>
</bean>

  2、启用事务注解

<tx:annotation-driven transaction-manager="transactionManager"/>

  3、在方法上使用@Transactional即可实现事务。
  4、事务的传播行为:当一个(主)事务调用多个(子)事务时。使用propagation指定事务的传播行为。
    1)、@Transactional(propagation=propagation.REQUIRED)(默认):使用主事务,子事务一旦失败,全部回滚。
    2)、@Transactional(propagation=propagation.REQUIRES_NEW):主事务挂起,子事务失败只回滚该子事务。
  5、@Transactional其他属性:
    isolation:指定事务的隔离级别,默认使用数据库的隔离级别。常用Isolation.READ_COMMITTED(读已提交)。
    readOnly: 指定事务是否为只读。数据库不加锁,可以优化事务。
    timeout:设置超时回滚,单位秒。

posted @ 2020-04-11 20:03  woldcn  阅读(131)  评论(0编辑  收藏  举报