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