• Spring底层代理-----


    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:p="http://www.springframework.org/schema/p"
           xmlns:c="http://www.springframework.org/schema/c"
           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="before" class="cn.bdqn.service.Advice.BeforeAdvice"/>
        <bean id="userService" class="cn.bdqn.service.impl.UserServiceImpl"/>
        <bean id="after" class="cn.bdqn.service.Advice.AfterAdvice"/>
        <bean id="around" class="cn.bdqn.service.Advice.AroundAdvice"/>
        <!--配置异常目标duixiang-->
        <bean id="userException" class="cn.bdqn.service.UserPackage.UserServiceImpl"/>
        <bean id="myException" class="cn.bdqn.service.Advice.ExceptionAdvice"/>
    
        <bean id="uException" class="org.springframework.aop.framework.ProxyFactoryBean">
            <property name="targetName" value="userException"/>
            <property name="interceptorNames">
                <array>
                    <value>uException</value>
                </array>
            </property>
            <!--代理类的优化  是否使用cglib动态代理-->
            <property name="optimize" value="true"/>
            <!-- <property name="proxyTargetClass" value="true"/>
            proxyTargetClass:默认是false  ,默认执行jdk动态代理!
                              设置成true,强制执行cglib!
            optimize :  代理类的优化
                       有接口就是用jdk,没有接口使用cglib动态代理
            -->
        </bean>
        <!--
             我们的动态代理 (在程序运行期间,动态生成的代理类) 分为两种方式:
                01.jdk     只能应用于实现接口的情况
                02.cglib   应用于实现接口和类的情况
                如果我们是接口的情况,使用jdk效率高!
                如果我们是类的情况,必须使用cglib!
               问题?
                  程序  spring容器怎么知道我们是用的类还是接口??
                 public class ProxyConfig implements Serializable
                   private boolean proxyTargetClass = false;
                   private boolean optimize = false;
                   spring底层默认使用cglib! 现在我们的项目中使用的是接口!
                   用spring默认的性能不高!
                  proxyTargetClass 和optimize都是用来设置 我们使用的代理模式是jdk还是cglib!
                  @Override
           public AopProxy createAopProxy(AdvisedSupport config) throws AopConfigException {
             //  根据我们配置文件中 proxyTargetClass 和 optimize的配置
               if (config.isOptimize() || config.isProxyTargetClass() || hasNoUserSuppliedProxyInterfaces(config)) {
                   Class<?> targetClass = config.getTargetClass();
                   if (targetClass == null) {
                       throw new AopConfigException("TargetSource cannot determine target class: " +
                               "Either an interface or a target is required for proxy creation.");
                   }
                  //根据目标对象返回对应的动态代理
                   if (targetClass.isInterface() || Proxy.isProxyClass(targetClass)) {
                       return new JdkDynamicAopProxy(config);
                   }
                   return new ObjenesisCglibAopProxy(config);
               }
               else {
                   return new JdkDynamicAopProxy(config);
               }
           }
           -->
    
    
        <bean id="userProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
            <property name="targetName" value="userService"/>
           <!-- <property name="interceptorNames" value="before"/>-->
            <property name="interceptorNames" >
                <array>
                    <value>before</value>
                    <value>after</value>
                    <value>around</value>
                </array>
            </property>
    
        </bean>
    </beans>
  • 相关阅读:
    Android声音和视频播放
    Android使用Pull生成XML
    Android实现图片倒影效果
    Android实现XML解析技术
    Android实现翻页功能原理
    Android实现获取系统应用列表(转)
    mini6410移植全攻略(2)uboot移植之搭建项目框架
    linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结
    脚本与环境变量设置
    /etc/profile和 . profile 文件
  • 原文地址:https://www.cnblogs.com/laosunlaiye/p/7679421.html
Copyright © 2020-2023  润新知