zoukankan      html  css  js  c++  java
  • Spring IoC和AOP使用扩展(二)

    一、IOC的实现方式:

      Set注入:熟悉必须有公共set方法;

      构造器注入:可以根据构造器参数名称、下标注入;

      p命名空间注入:要求有set方法;

      

      

      

      内部bean的实现;

    <bean id="userService" class="com.service.UserService">
    <property name="userDao">
    <bean class="com.dao.UserDao"></bean>
    </property>
    <!-- 第一种方式 -->
    <!-- <constructor-arg > -->
    <!-- 设置local属性默认在当前文件中找 -->
    <!-- <ref local="userDao"/> -->
    <!-- 设置local属性默认在全部文件中找 -->
    <!-- <ref bean="userDao"/> -->
    <!-- </constructor-arg> -->
    <!-- 第二种方式 -->
    <property name="list">
    <list>
    <value>qwe</value>
    <value>123</value>
    </list>
    </property>

    </bean>

      

      各种数据类型的注入:

    list集合的注入

    <property name="list"><!-- 给list集合注入 -->

           <list>

             <value>沾上干</value>

             <value>房顶上</value>

           </list>

         </property>

    set集合的注入

    <property name="set"><!-- 给set集合注入 -->

           <list>

             <value>aaa</value>

             <value>bbb</value>

           </list>

         </property>

     数组的注入

    <property name="strs"><!-- 给数组注入 -->

           <list>

             <value>沾上干1!</value>

             <value>房顶上2!</value>

           </list>

         </property>

     map集合的注入

    <property name="map"><!-- 给map集合注入 -->

           <map>

             <entry key="aaa" value="111"></entry>

             <entry key="bbb" value="222"></entry>

           </map>

         </property>

     属性文件的注入

    <property name="prop"><!-- 给属性文件集合注入 -->

           <props>

             <prop key="a">!!!</prop>

             <prop key="b">!!???</prop>

           </props>

         </property>

     注入null值

    <property name="NULL"><!-- 注入null值 -->

           <null></null>

         </property>

     

     注入空串 

     

    <property name="KC"><!-- 注入空串 -->

           <value></value>

         </property>

      二、常用的增强处理


    before

     前置之增强处理,在目标方法执行之前织入增强处理
     AfterReturning  后置增强处理,在目标方法正常执行(不出现异常)后织入增强处理
     AfterThrowing  异常增强处理,在目标方法抛出异常后织入增强处理
     after  最终增强处理,不管方法是否抛出异常,都会在目标方式执行之后执行
     Around  环绕增强处理,在目标方法前后都可以织入增强处理

      

         

         

      

        属性throwing的值,必须和增强方法的异常参数名一致

        

      三、Spring注解 

      @Component:实现Bean组件的定义

      @Repository  :用于标注DAO类

      @Service   :用于标注业务类

      @Controller    :用于标注控制器类

      1、基本类的注解

        在要创建实力的(dao)类上使用对应到@Repository该注解的作用,就等价于:

          <bean id="userDao" class="com.dao.UserDao"></bean>

        类上的注解,spring容器不知道,需要spring扫描,扫描的多个包用逗号隔开

          <context:component-scan base-package="com.dao,com.tools" />

        

       2、环绕通知的注解(AOP注解)

        

          注意:核心配置文件中一定要让spring启用对于@AspectJ注解的支持

        

        3、切点的签名

    @Component
    @Aspect
    public class MyLogger {
      @Pointcut("execution(* com.dao.*.*(..))")
      public void cut(){}

      @Around("cut()")
      public void show(ProceedingJoinPoint join){
        System.out.println("环绕增强已经执行");
      }
    }

        4、环绕通知加注解


    @Aspect //等价于<aop:aspect ref="myLogger"> 定义一个切面,引用它下面的类
    @Component //等价于<bean id="myLogger" class="com.tools.MyLogger" />
    //描述一个实例
    public class MyLogger {
      @Pointcut("execution(* com.dao.*.*(..))")
      public void xx(){}//切点规则签名

      @Around("xx()")
      //代表的是通知的类型(切点的规则)
      public void printLogger(ProceedingJoinPoint join){
        System.out.println("环绕通知执行前");
    try {
      join.proceed();
    } catch (Throwable e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    System.out.println("环绕通知执行后");
    }
    @Before("xx()")
    public void before(){
    System.out.println("前置通知");
    }
    }

      

  • 相关阅读:
    Jedis测试redis
    jedis池的作用
    错误
    Ceph剖析:数据分布之CRUSH算法与一致性Hash
    drools规则引擎初探
    Techniques for HA IT Management
    django_simple_captcha使用笔记
    微服务架构的理论基础
    分布式系统服务的稳定性
    四层、七层负载均衡的区别
  • 原文地址:https://www.cnblogs.com/newbest/p/9191399.html
Copyright © 2011-2022 走看看