Spring面向切面编程——Spring实现AOP方式——通过注解实现

来源:互联网 发布:虚拟网络运营商 编辑:程序博客网 时间:2024/06/06 19:32

Log.java:

package log;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;@Aspectpublic class Log {    @Before("execution(* service.UserServiceImp.*(..))")    public void before(){        System.out.println("方法执行前");    }    @After("execution(* service.UserServiceImp.*(..))")    public void after(){        System.out.println("方法执行后");    }    @Around("execution(* service.UserServiceImp.*(..))")    public Object around(ProceedingJoinPoint jp) throws Throwable {        System.out.println("环绕前");        System.out.println("签名"+jp.getSignature());        /*执行目标方法*/        Object result = jp.proceed();        System.out.println("环绕后");        return result;    }}


UserService.java:

package service;public interface UserService {    public void add();    public void delete();    public void search();    public void update();}

UserServiceImp.java:

package service;public class UserServiceImp implements UserService {    @Override    public void add() {        System.out.println("增加用户");    }    @Override    public void delete() {        System.out.println("删除用户");    }    @Override    public void search() {        System.out.println("查找用户");    }    @Override    public void update() {        System.out.println("修改用户");    }}

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:aop="http://www.springframework.org/schema/aop"       xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/aop        http://www.springframework.org/schema/aop/spring-aop.xsd">    <bean id="userService" class="service.UserServiceImp"/>    <bean id="log" class="log.Log"/>    <!--会自动去找aop-->    <aop:aspectj-autoproxy/></beans>

Test.java:

package test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import service.UserService;public class Test {    public static void main(String[] args) {        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");        UserService userService = (UserService) applicationContext.getBean("userService");        userService.add();    }}

测试结果:

环绕前签名void service.UserService.add()方法执行前增加用户环绕后方法执行后

可以加我微信一起学习:

                                             

阅读全文
0 0
原创粉丝点击