学习笔记-Spring(三)

Spring框架的全部教程,详细点这里
AOP 即 (Aspect Oriented Program)面向切面编程


    在面向切面编程的思想里面,核心业务功能和切面功能分别独立进行开发 然后把切面功能和核心业务功能 "编织" 在一起,叫做AOP。首先,在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能。 
  • 核心业务:比如登陆,增加数据,删除数据都叫核心业务;
  • 周边功能:周边功能在Spring的面向切面编程AOP思想里,即被定义为切面;比如性能统计,日志,事务管理等等;
  • 辅助功能和核心业务功能彼此独立进行开发;
  • 比如登陆功能,即便是没有性能统计和日志输出,也可以正常运行;
  • 如果需要,就把”日志输出” 功能和 “登陆” 功能编织在一起,即登陆时,可以查看日志输出;
  • 辅助功能,又叫做切面,这种能够选择性的,低耦合的把切面和核心业务功能结合在一起的编程思想,就叫做切面编程

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>

猜你喜欢

转载自blog.csdn.net/qq_36653267/article/details/79366277