Spring框架的全部教程,详细点这里
AOP 即 (Aspect Oriented Program)面向切面编程
在面向切面编程的思想里面,核心业务功能和切面功能分别独立进行开发 然后把切面功能和核心业务功能 "编织" 在一起,叫做AOP。首先,在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能。
- 核心业务:比如登陆,增加数据,删除数据都叫核心业务;
- 周边功能:周边功能在Spring的面向切面编程AOP思想里,即被定义为切面;比如性能统计,日志,事务管理等等;
- 辅助功能和核心业务功能彼此独立进行开发;
- 比如登陆功能,即便是没有性能统计和日志输出,也可以正常运行;
- 如果需要,就把”日志输出” 功能和 “登陆” 功能编织在一起,即登陆时,可以查看日志输出;
- 辅助功能,又叫做切面,这种能够选择性的,低耦合的把切面和核心业务功能结合在一起的编程思想,就叫做切面编程
AOP切面编程思路
1、准备业务类TeacherService.java
public class TeacherService {
public void doSomeService() {
System.out.println("doSomeService");
}
}
2、applicationContext.xml文件
<context:component-scan base-package="com.bean"/>
<bean name="ts" class="com.spring.service.TeacherService"></bean>
3、测试
ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "applicationContext.xml" });
TeacherService ts=(TeacherService) context.getBean("ts");
ts.doSomeService();
4、准备日志切面 LoggerAspect.java
该日志切面的功能是 在调用核心功能之前和之后分别打印日志,切面就是原理图中讲的那些辅助功能。
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;
}
}
5、applicationContext.xml
<context:component-scan base-package="com.bean"/>
<bean name="ts" class="com.spring.service.TeacherService"/>
<bean id="loggerAspect" class="com.spring.aspect.LoggerAspect"/>
<aop:config >
<aop:pointcut expression="execution(* com.spring.service.TeacherService.*(..))" id="loggerCutpoint"/>
<aop:aspect id="logAspect" ref="loggerAspect">
<aop:around method="log" pointcut-ref="loggerCutpoint" />
</aop:aspect>
</aop:config>