SPRING-AOP面向切面编程

     面向切面编程即抽取程序的公共方法放在一个类里面(这个类被称为通知),然后在需要该方法的时候通过AOP将这个公共方法插入进来,既可以节省代码量,又不需要修改源码。

        此处以插入log日志为例子演示AOP的插入配置和过程

一、JAR包

            SPRING-AOP面向切面编程_第1张图片

        spring的四大核心包加aop和aspects包 另外需要2个日志包 1个aop 1个aspect。 一共10个包。

二、编写接口和实现类,模拟service层

        我们模拟一个service的接口类ICustomerService.java 具有三种方法         

package tz.service;

public interface ICustomerService {

    //保存客户
    void saveCustomer();
    //更新客户
    void updateCustomer(int i);
    //删除客户
    int deleteCustomer();
}

    接着写一个实现类CustomerServiceImpl.java

package tz.service.impl;

import tz.logtest.Logger;
import tz.service.ICustomerService;
//模拟客户的业务层的实现类
public class CustomerServiceImpl implements ICustomerService {
    @Override
    public void saveCustomer() {

        System.out.println("保存客户");
    }

    @Override
    public void updateCustomer(int i) {
        System.out.println("更新客户。。"+i);
    }

    @Override
    public int deleteCustomer() {
        System.out.println("删除客户");
        return 0;
    }
}

一个基本的service层就成型了,此时配置spring用来创建对象,新建一个bean.xml文件。




    
        

再新建一个执行类Client.java

package tz.ui;

import javafx.application.Application;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import tz.service.ICustomerService;

public class Client {

    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
        ICustomerService cs= (ICustomerService) ac.getBean("customerService");
        cs.saveCustomer();
    }
}

此时运行Client的main()方法即可获得控制台输出"保存客户",说明配置完毕

三、插入log文件。

        新建一个Logger.java 包含一个printLog方法 模拟打印日志

package tz.logtest;
//一个用于记录日志的类
public class Logger {
    //记录日志操作
    public void printLog(){
        System.out.println("Logger中的printLog方法开始记录日志了。。。。");
    }
}

    此时要求在service层的方法里打印日志,如果普通做法即是在service层创建log对象执行printLog()方法

public class CustomerServiceImpl implements ICustomerService {
    @Override
    public void saveCustomer() {
        new Logger().printlLog();
        System.out.println("保存客户");
    }

其他地方不需要改变,运行Client即可输出日志,内容如下:

Logger中的printLog方法开始记录日志了。。。。
保存客户

但是在service里面需要执行的方法有那么多,如果是真实的开发中需要每个方法都打印日志的时候,一个一个的在方法里创建对象再执行打印方法肯定是存在弊端的,1.代码重复 2.代码量加大 3.需要修改源码,此时我们就可以通过AOP的面向切面编程,将这个打印日志方法作为一个面切到切入点中,这个切入点即是需要执行公共方法的地方,切面即是我们的公共方法。

四、改进

        配置bean.xml

    



    
        
    
    
     
        
        
            
            
                
                
            
        

配置好bean.xml之后 在CustomerServiceImpl的saveCustomer方法中就不需要执行printLog()方法了

再次运行Client.java 即可获得和之前一样的输出

Logger中的printLog方法开始记录日志了。。。。
保存客户
以上就是AOP的简单配置模拟。

    


    

你可能感兴趣的:(JAVA,spring,AOP)