zoukankan      html  css  js  c++  java
  • day39-Spring 05-Spring的AOP:不带有切点的切面

    Spring底层的代理的实现:


    不带切点的切面是对类里面的所有的方法都进行拦截.


    做Spring AOP的开发需要两个包:一个是AOP的包,一个是AOP联盟的包(因为规范是由AOP联盟提出来的).


     


    用Spring开发不用自己手写代码生成代理.Spring是可以通过配置生成代理的.


    ProxyFactoryBean会帮你自动生成代理.

    通过配置就可以让Spring自动生成代理对象了.这就是不带切点的切面.但是这种方式以后几乎不会用,因为你有一个类就得配置一段,你要是有一百个类就得配置一百次下面这段代码

      <!-- 手动生成代理太麻烦了.Spring支持配置生成代理: -->
      <!-- 代理对象 -->
      <bean id="customerDaoProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
          <!-- 设置目标对象 -->
          <property name="target" ref="customerDao"></property>
          <!-- 设置实现的接口,value中写接口的全路径 -->
          <!-- 类实现的接口的全路径 -->
          <property name="proxyInterfaces" value="cn.itcast.spring3.demo3.CustomerDao"></property>
          <!-- 需要使用value:要的名称 使用beforeAdvice对它进行增强 -->
          <property name="interceptorNames" value="beforeAdvice"></property><!--interceptorNames要拦截的名称  -->
          <!-- 这个是针对类的所有方法进行拦截的,你还没到配置方法的那一步呢 -->
      </bean>

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 引入beans的头 -->
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
        <!-- 定义目标对象 -->
         <bean id="customerDao" class="cn.itcast.spring3.demo3.CustomerDaoImpl">
      
      </bean>
    <!-- 定义增强  增强对象-->
      <bean id="beforeAdvice" class="cn.itcast.spring3.demo3.MyBeforeAdvice">
      </bean>
      
      <!-- 手动生成代理太麻烦了.Spring支持配置生成代理: -->
      <!-- 代理对象 -->
      <bean id="customerDaoProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
          <!-- 设置目标对象 -->
          <property name="target" ref="customerDao"></property>
          <!-- 设置实现的接口,value中写接口的全路径 -->
          <!-- 类实现的接口的全路径 -->
          <property name="proxyInterfaces" value="cn.itcast.spring3.demo3.CustomerDao"></property>
          <!-- 需要使用value:要的名称 使用beforeAdvice对它进行增强 -->
          <property name="interceptorNames" value="beforeAdvice"></property><!--interceptorNames要拦截的名称  -->
          <!-- 这个是针对类的所有方法进行拦截的,你还没到配置方法的那一步呢 -->
      </bean>
    </beans>
    package cn.itcast.spring3.demo3;
    
    public interface CustomerDao {
    public void add();
    public void delete();
    public void update();
    public void find();
    }
    package cn.itcast.spring3.demo3;
    
    public class CustomerDaoImpl implements CustomerDao {
    
        public void add() {
            // TODO Auto-generated method stub
            System.out.println("添加客户");
        }
    
        public void delete() {
            // TODO Auto-generated method stub
            System.out.println("删除客户");
        }
    
        public void update() {
            // TODO Auto-generated method stub
            System.out.println("修改客户");
        }
    
        public void find() {
            // TODO Auto-generated method stub
            System.out.println("查询客户");
        }
    
    }
    package cn.itcast.spring3.demo3;
    
    import java.lang.reflect.Method;
    
    import org.springframework.aop.MethodBeforeAdvice;
    
    /**
     * 前置增强
     * @author zhongzh
     *
     */
    public class MyBeforeAdvice implements MethodBeforeAdvice{
        /*
         * method:执行的方法
         * args:参数
         * target:目标对象
         * 要对目标对象的某一方法增强
         * (non-Javadoc)
         * @see org.springframework.aop.MethodBeforeAdvice#before(java.lang.reflect.Method, java.lang.Object[], java.lang.Object)
         */
        public void before(Method method, Object[] args, Object target)
                throws Throwable {
            // TODO Auto-generated method stub
            System.out.println("前置增强.....");
        }
    
    
    
    }
    package cn.itcast.spring3.demo3;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    @ContextConfiguration("classpath:applicationContext.xml")
    @RunWith(SpringJUnit4ClassRunner.class)
    public class SpringTest3 {
        @Autowired
        //@Qualifier("customerDao")//和applicationContext.xml中配置的id=customerDao对应 注入的是真实的对象,必须注入代理对象.
        @Qualifier("customerDaoProxy")
        private CustomerDao customerDao;
        
        @Test
        public void demo1(){
            customerDao.add();
            customerDao.delete();
            customerDao.update();
            customerDao.find();
            
            
        }
        
    }
  • 相关阅读:
    vue 路由嵌套 (子路由跳转报错或者失效解决方法)
    vue-cli3主题色系统
    vue项目哀悼日
    el-upload 文件上传显示进度
    课表
    uni-app 开发钉钉小程序
    Linux/Centos/Ubuntu crontab备份数据库
    【转】鲁迅为厦大题写校名,为啥4个字错了3个?专家:鲁迅故意写错的。
    计数单位资料汇总(个十百千兆京...,分厘毫丝忽微纤沙尘埃...)
    【转】如意算盘:中国的第五大发明
  • 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/6775401.html
Copyright © 2011-2022 走看看