SpringAOP的实现(七)
发布日期:2021-05-10 07:59:19 浏览次数:19 分类:精选文章

本文共 4269 字,大约阅读时间需要 14 分钟。

  • IUserService
package com.qfedu.aop07;import java.util.List;/** * Created by HuangCong on 2020/2/26. */public interface IUserService {       List getAllUser();    boolean saveUser(Object user);    boolean deleteUser(int uid);    boolean updateUser(Object obj);}
  • UserServiceImpl实现类:
package com.qfedu.aop07;import org.springframework.stereotype.Component;import java.util.List;/** * Created by HuangCong on 2020/2/26. */@Component("us")public class UserServiceImpl implements IUserService {       @Override    public List getAllUser() {           System.out.println("------getAllUser------");        return null;    }    @Override    public boolean saveUser(Object user) {           System.out.println("------saveUser------");        return false;    }    @Override    public boolean deleteUser(int uid) {           System.out.println("------deleteUser------");        return false;    }    @Override    public boolean updateUser(Object obj) {           System.out.println("------updateUser------");//        System.out.println(1 / 0);        return false;    }}
  • MyAspect:切面类
package com.qfedu.aop07;/** * Created by HuangCong on 2020/2/28. */public class MyAspect {       public void before() {           System.out.println("=========Before=========");    }    public void after() {           System.out.println("=========After==========");    }}
  • UserServiceImpl2
package com.qfedu.aop07;import org.springframework.stereotype.Component;import java.util.ArrayList;import java.util.List;@Component("us2")public class UserServiceImpl2 implements IUserService {       @Override    public List getAllUser() {           System.out.println("--------getAllUser----------");        return new ArrayList<>();    }    @Override    public boolean saveUser(Object user) {           System.out.println("--------saveUser----------");        return true;    }    @Override    public boolean deleteUser(int uid) {           System.out.println("--------deleteUser----------");        return false;    }    @Override    public boolean updateUser(Object obj) {           System.out.println("--------updateUser----------");        return true;    }}
  • MyBeanPostProcessor类
package com.qfedu.aop07;import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanPostProcessor;import org.springframework.cglib.proxy.InvocationHandler;import org.springframework.cglib.proxy.Proxy;import org.springframework.lang.Nullable;import java.lang.reflect.Method;/** * 配置了包扫描之后,该类会初始化两个对象EventListenerMethodProcessor和DefaultEventListenerFactory,再外加我们自己的组件对象 * 所以会发现有一个before和一个after打印 * 我还专门加了一个UserServiceImpl2,你会发现将有二个before和二个after的打印(注意看看该类上的Component注解是否启用) */public class MyBeanPostProcessor implements BeanPostProcessor {       @Nullable    @Override    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {           System.out.println("=======Before======" + bean);        return bean;    }    @Nullable    @Override    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {           System.out.println("========After======" + bean);        return Proxy.newProxyInstance(MyBeanPostProcessor.class.getClassLoader(), bean.getClass().getInterfaces(), new InvocationHandler() {               @Override            public Object invoke(Object o, Method method, Object[] objects) throws Throwable {                   MyAspect ma = new MyAspect();                ma.before();                Object obj = method.invoke(bean, objects);                ma.after();                return obj;            }        });    }}
  • beans_aop07.xml:XML文件配置
  • TestAOP07
package com.qfedu.aop07;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * Created by HuangCong on 2020/2/28. */public class TestAOP07 {       @Test    public void testAOP06() {           ApplicationContext context = new ClassPathXmlApplicationContext("beans_aop07.xml");        IUserService us = context.getBean("us", IUserService.class);        Object obj = new Object();        us.getAllUser();        us.saveUser(obj);        us.deleteUser(1);        us.updateUser(obj);    }}
上一篇:Mapper.xml中新增数据并返回主键ID(MYSQL)
下一篇:SpringAOP的实现(六)

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年04月02日 06时26分05秒