Spring AOP AspectJ 开发

Spring AOP ---------AspectJ 开发

1导的jar包和MyaspectJ包结构
在这里插入图片描述
在这里插入图片描述

2-log4j.properties

### \u914D\u7F6E\u6839 ###
log4j.rootLogger = error,console,
###,\u5176\u4ED6\u914D\u7F6EfileAppender,dailyRollingFile,ROLLING_FILE,MAIL,DATABASE

### \u8BBE\u7F6E\u8F93\u51FAsql\u7684\u7EA7\u522B\uFF0C\u5176\u4E2Dlogger\u540E\u9762\u7684\u5185\u5BB9\u5168\u90E8\u4E3Ajar\u5305\u4E2D\u6240\u5305\u542B\u7684\u5305\u540D ###
log4j.logger.org.springframework=error
#log4j.logger.java.sql.Connection=dubug
#log4j.logger.java.sql.Statement=dubug
#log4j.logger.java.sql.PreparedStatement=dubug
#log4j.logger.java.sql.ResultSet=dubug

### \u914D\u7F6E\u8F93\u51FA\u5230\u63A7\u5236\u53F0 ###
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern =  %d %p [ %c] - %m %n %d

### \u914D\u7F6E\u8F93\u51FA\u5230\u6587\u4EF6 ###
log4j.appender.fileAppender = org.apache.log4j.FileAppender
log4j.appender.fileAppender.File = logs/log.log
log4j.appender.fileAppender.Append = true
log4j.appender.fileAppender.Threshold = DEBUG
log4j.appender.fileAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.fileAppender.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### \u914D\u7F6E\u8F93\u51FA\u5230\u6587\u4EF6\uFF0C\u5E76\u4E14\u6BCF\u5929\u90FD\u521B\u5EFA\u4E00\u4E2A\u6587\u4EF6 ###
log4j.appender.dailyRollingFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyRollingFile.File = logs/log.log
log4j.appender.dailyRollingFile.Append = true
log4j.appender.dailyRollingFile.Threshold = DEBUG
log4j.appender.dailyRollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.dailyRollingFile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### \u914D\u7F6E\u8F93\u51FA\u5230\u6587\u4EF6\uFF0C\u4E14\u5927\u5C0F\u5230\u8FBE\u6307\u5B9A\u5C3A\u5BF8\u7684\u65F6\u5019\u4EA7\u751F\u4E00\u4E2A\u65B0\u7684\u6587\u4EF6 ###
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender 
log4j.appender.ROLLING_FILE.Threshold=ERROR 
log4j.appender.ROLLING_FILE.File=rolling.log 
log4j.appender.ROLLING_FILE.Append=true 
log4j.appender.ROLLING_FILE.MaxFileSize=10KB 
log4j.appender.ROLLING_FILE.MaxBackupIndex=1 
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout 
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

### \u914D\u7F6E\u8F93\u51FA\u5230\u90AE\u4EF6 ###
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=chenyl@yeqiangwei.com
log4j.appender.MAIL.SMTPHost=mail.hollycrm.com
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.To=chenyl@yeqiangwei.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

### \u914D\u7F6E\u8F93\u51FA\u5230\u6570\u636E\u5E93 ###
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout

3配置文件 AspectJapplicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">


    <context:component-scan base-package="com.baidu"></context:component-scan>
    <!--使注解和配置都生效-->
    <context:annotation-config/>


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

    <bean id="deptService" class="com.baidu.AspectJ.DeptServiceImp"></bean>
    <bean id="myAspect"  class="com.baidu.AspectJ.MyAspectJ"></bean>



</beans>

4接口DeptServiceI

package com.baidu.AspectJ;

public interface DeptServiceI {
    void add();
    void del();
    String findName();
}

5实现类class DeptServiceImp

package com.baidu.AspectJ;

public class DeptServiceImp implements DeptServiceI{
    @Override
    public void add() {
        System.out.println("add---");

    }

    @Override
    public void del() {
        System.out.println("del---");

    }

    @Override
    public String findName() {
        System.out.println(" findName");
        //有异常时通知,无异常时不通知
        //int i=1/0;
        return "Lisi";
    }
}

6测试类TestMyAspectJ

package com.baidu.AspectJ;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestMyAspectJ {

    public static void main(String[] args) {

        ClassPathXmlApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("AspectJapplicationContext.xml");

        DeptServiceI deptServiceI = (DeptServiceI)applicationContext.getBean("deptService");//
        deptServiceI.add();
        deptServiceI.del();
        deptServiceI.findName();

    }
}

7AspectJ开发类、

package com.baidu.AspectJ;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
//纯注解开发
@Aspect
public class MyAspectJ {

   //@Before(value = "execution(* com.baidu.AspectJ.DeptServiceImp.*(..))")
    public  void  myBefore(JoinPoint joinPoint){

        System.out.println("前置增强"+joinPoint);
    }
   // @AfterReturning(value = "execution(* com.baidu.AspectJ.DeptServiceImp.findName(..))",returning="reval")

    public  void  myAfter(JoinPoint joinPoint,Object reval){

        System.out.println("后置增强,返回值:"+reval);
    }

   // @Around(value ="execution(* com.baidu.AspectJ.DeptServiceImp.findName(..))")

    public Object myAround(ProceedingJoinPoint point) throws Throwable {

        System.out.println("环绕通知前1");
        Object returnVal=point.proceed();
        System.out.println("环绕通知后2");
        return returnVal;

    }

    //@AfterThrowing(value ="execution(* com.baidu.AspectJ.DeptServiceImp.findName(..))",throwing = "ex")

    public void myAfterThrowing(JoinPoint joinPoint,Throwable ex) {
    
    //有异常时通知,无异常时不通知
        System.out.println("异常通知,异常信息是:" + ex.getMessage());

    }


   // @After(value ="execution(* com.baidu.AspectJ.DeptServiceImp.findName(..))")

    public void myAfter() {

        System.out.println("最终通知" );

    }

//简化表达式
    @Before(value = "MyAspectJ.zz()")
    public  void  myBeforePointcut(JoinPoint joinPoint){

        System.out.println("前置增强"+joinPoint);
    }
@Pointcut(value = "execution(* com.baidu.AspectJ.DeptServiceImp.*(..))")
    private  void  zz(){

    }
}

8各种情况的运行结果

//前置增强
前置增强execution(void com.baidu.AspectJ.DeptServiceI.add())
前置增强execution(void com.baidu.AspectJ.DeptServiceI.del())
前置增强execution(String com.baidu.AspectJ.DeptServiceI.findName())

Process finished with exit code 0


//后置增强
add---
del---
 findName
后置增强,返回值:Lisi

Process finished with exit code 0


//环绕通知
add---
del---
环绕通知前1
 findName
环绕通知后2



//无异常通知
add---
del---
 findName

Process finished with exit code 0

//异常通知
add---
del---
 findName
异常通知,异常信息是:/ by zero



//简化表达式
前置增强execution(void com.baidu.AspectJ.DeptServiceI.add())
add---
前置增强execution(void com.baidu.AspectJ.DeptServiceI.del())
del---
前置增强execution(String com.baidu.AspectJ.DeptServiceI.findName())
 findName

Process finished with exit code 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值