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("前置通知");
}
}

  

原文地址:https://www.cnblogs.com/newbest/p/9191399.html