Spring实践入门学习4--AOP

AOP核心思想简介:

AOP 即 Aspect Oriented Program 面向切面编程
首先,在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能
所谓的核心业务,比如登陆,增加数据,删除数据都叫核心业务
所谓的周边功能,比如性能统计,日志,事务管理等等
周边功能在Spring的面向切面编程AOP思想里,即被定义为切面
在面向切面编程AOP的思想里面,核心业务功能和切面功能分别独立进行开发
然后把切面功能和核心业务功能 "编织" 在一起,这就叫AOP

为实现这一思想,我们编码来看一看:
1.准备一下业务类Person_dbservice:

package com.cqu.service;

public class Person_dbservice {  
    public void doSomeService() {
        
        System.out.println("二狗子要登录了");
    }
}

2.准备日志切面loggerAspect:
该日志切面的功能是,在调用核心功能之前和之后分别打印日志
就是将来执行某个核心功能编织之后,用于执行核心功能的代码

package com.cqu.aspect;

import org.aspectj.lang.ProceedingJoinPoint;

public class LoggerAspect { 
    public Object log(ProceedingJoinPoint joinPoint) throws Throwable{
        System.out.println("start log:"+joinPoint.getSignature().getName());
        Object object=joinPoint.proceed();
        System.out.println("end log:"+joinPoint.getSignature().getName());
        
        return object;
    }
}

3.配置applicationContext:
声明业务对象:

<bean name="service" class="com.cqu.service.Person_dbservice"></bean>

声明日志切面:

<bean id="loggerAspect" class="com.cqu.aspect.LoggerAspect"></bean>

指定右边的核心业务功能:

<aop:pointcut id="loggerCutPoint" expression="execution(* com.cqu.service.Person_dbservice.*(..))"/>

指定左边的辅助功能:

<aop:aspect id="logAspect" ref="loggerAspect">
            <aop:around method="log" pointcut-ref="loggerCutPoint"/>
</aop:aspect>

然后通过aop:config把核心业务功能和辅助功能编织在一起
就是下面这样的:

<aop:config>
        <aop:pointcut id="loggerCutPoint" expression="execution(* com.cqu.service.Person_dbservice.*(..))"/>
        
        <aop:aspect id="logAspect" ref="loggerAspect">
            <aop:around method="log" pointcut-ref="loggerCutPoint"/>
        </aop:aspect>
</aop:config>

4.书写测试类:

package com.cqu.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.cqu.service.Person_dbservice;

public class My_test { 

    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

        Person_dbservice person_dbservice = (Person_dbservice) context.getBean("service");
        person_dbservice.doSomeService();

    }

}

5.测试结果是这样的:

start log:doSomeService
二狗子要登录了
end log:doSomeService

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容