spring总结

来源:互联网 发布:java服务器用linux 编辑:程序博客网 时间:2024/06/16 22:10

 * 引用类型使用注解赋值:@Autowired

 *   位置:

 *      1.在属性定义的上面, 无需set方法

 *      2.set方法的上面。

 *   使用byName方式给引用类型赋值,需要两个注解@Autowired ,@Qualifer

 *   @Autowired:给引用类型赋值

 *   @Qualifer:指定对象的名称,它有value="beanid"

 *   

 */

//引用类型 byName

@Autowired

@Qualifier("mySchool")

private School myXueXiao;

*-*spring配置

IoC:控制反转, 反转控制

 

控制:控制java对象的创建,属性(依赖关系)的赋值

反转:在代码之外,使用容器创建对象。 容器可以 spring框架实现。

正转:在代码中,使用new构造方法创建对象。

*2*

 加入注解@Aspect ,表示当前类是切面类, 是用来给业务方法增加功能的。

前置通知:@Before

 *   位置:在方法的上面

 *   属性:value="切入点表达式"

 *   

 * 特点:

 *  1.在目标方法之前先执行的。执行的时间点

 *  2.不会改变目标方法的执行结果。

 *  3.不会影响目标方法的执行流程。

/**

 * 切面类中的方法可以带有参数 : JoinPoint

 *    JoinPoint:表示切入点的信息,可以获取切入的方法名称, 方法的参数等。

 *    注意:JoinPoint必须位于参数列表的第一个参数

 */

@Before("execution(* com.bjpowernode.ba01.SomeServiceImpl.doSome(..))")

public void myBefore(JoinPoint jp){

//JoinPoint 获取切入点的信息

System.out.println("切入点的签名:"+jp.getSignature());

//获取参数信息

Object args [] = jp.getArgs();

System.out.println("切入点的参数个数:"+args.length);

for(Object obj: args){

String str  = (String)obj;

System.out.println("参数:"+str);

}

//记录日志的功能代码

System.out.println("前置通知:在目标方法之前,增强功能");

}

后置通知:@AfterReturning

 *   位置:方法的上面

 *   属性:

 *      1. value:切入点表达式

 *      2. returning:自定义的变量名,表示目标方法的执行结果。 和通知方法的形参名一样。

 *      

 * 特点:

 *  1.在目标方法之后执行的, 这是执行的时间点。

 *  2.能获取到目标方法的执行结果。

 *     ①:如果目标方法返回时对象,可以修改对象的属性值。

 *     ②:如果目标方法返回的是非引用类型(包括String),是不能修改值。

 *  3.不能改变目标方法的执行流程。

环绕通知:@Around

 *   位置:方法的上面

 *   属性:value 切入点表达式

 *

 * 特点:

 *  1.在目标方法前和后都能增强功能

 *  2.能够改变目标方法的执行结果。

 *  3.控制目标方法的执行

 * @throws Throwable

异常通知: @AfterThrowing

 *  位置:在方法的上面

 *  属性:

 *    1. value 切入点表达式

 *    2. throwing 自定义的变量名,表示目标方法抛出的异常对象名,和通知方法的参数名一样。

 *   

 * 特点

 *  1.在目标方法抛出异常的时候,会自动执行通知方法。

 *  2.不是异常处理程序,异常还是被抛出的。

 *  

 *  try{

 *     doSecond();

 *  }catch(Exception e){

 *     myAfterThrowing(e);

 *  }

 */

@AfterThrowing(value="execution(* *..SomeServiceImpl.doSecond(..))",throwing="ex")

public void myAfterThrowing(Throwable ex){

//调用邮件发送程序, 短信发送程序。 把异常记录到数据库,记录到文件

System.out.println("异常通知:在目标方法抛出异常时,执行。 异常的信息是:"+ex.getMessage());

}

/**

 * 最终通知:@After

 *   位置:在方法的上面

 *   属性:value 切入点表达式

 *   

 * 特点:

 *  1.在目标方法之后执行的。

 *  2.不管目标方法是否有异常抛出,总是会执行的。

 */

@After(value="mypt()")

public void myAfter(){

System.out.println("最终通知:总是会被执行的");

}

/**

 * 定义切入点:@Pointcut

 *    位置:自定义方法的上面

 *    属性:value 切入点表达式

 * 特点:

 *   管理切入的点定义,其他通知中value属性可以使用方法名作为切入点

 */

@Pointcut("execution(* *..SomeServiceImpl.doThird(..))")

private void mypt(){

//无需逻辑代码

}

 

原创粉丝点击