自动代理生成器

public interface ISomeService {
    public void doSome();

    public void doSecont();
}

public class MyAfterReturningAdvice implements AfterReturningAdvice {
    public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {
        System.out.println("-+-======================after=================-+-");
    }
}

public class MyBeforeAdvise implements MethodBeforeAdvice {

    public void before(Method method, Object[] objects, Object o) throws Throwable {
        System.out.println("==========log==========");

    }
}

public class SomeService implements ISomeService {
    //核心业务
    public void doSome() {
        System.out.println("拜托别让他一番努力换来是奢求!");
    }

    public void doSecont() {
        System.out.println("++===================Secont====================++");

    }
}

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:p="http://www.springframework.org/schema/p"
       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
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd
">
    <!--默认Advisor自动代理生成器-->
    <!--01.目标对象-->
    <bean id="someService" class="cn.happy.spring10aop_defaultZidonAgent.SomeService"></bean>

    <!--02.增强 通知-->
    <bean id="beforeAdvice" class="cn.happy.spring10aop_defaultZidonAgent.MyBeforeAdvise"></bean>
    <bean id="afterAdvice" class="cn.happy.spring10aop_defaultZidonAgent.MyAfterReturningAdvice"></bean>
    <!--增强:前置顾问-->
    <bean id="beforeAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
        <property name="advice" ref="beforeAdvice"></property>
        <property name="pattern" value=".*do.*"></property>
    </bean>

    <!--增强:后置顾问-->
    <bean id="afterAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
        <property name="advice" ref="afterAdvice"></property>
        <property name="pattern" value=".*do.*"></property>
    </bean>

    <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"></bean>

    </beans>

单测

 //1.默认Advisor自动代理生成器
    @Test
    public void test03(){
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext07_aop07_defaultzidonAgent.xml");
        ISomeService service = (ISomeService) ctx.getBean("someService");
        service.doSome();
        service.doSecont();
    }

2.BeanName自动代理生成器

接口:ISomeService

public interface ISomeService {
    public void doSome();

    public void doSecont();
}

public class MyBeforeAdvise implements MethodBeforeAdvice {

    public void before(Method method, Object[] objects, Object o) throws Throwable {
        System.out.println("==========log==========");

    }
}

public class SomeService implements ISomeService {
    //核心业务
    public void doSome() {
        System.out.println("拜托别让他一番努力换来是奢求!");
    }

    public void doSecont() {
        System.out.println("++===================Secont====================++");

    }
}

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:p="http://www.springframework.org/schema/p"
       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
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd
">
    <!--BeanName自动代理生成器-->
    <!--01.目标对象-->
    <bean id="someService" class="cn.happy.spring11aop_BeanNameZidonAgent.SomeService"></bean>

    <!--02.增强 通知-->
    <bean id="beforeAdvice" class="cn.happy.spring11aop_BeanNameZidonAgent.MyBeforeAdvise"></bean>

    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
        <!--目标对象-->
        <property name="beanNames" value="someService"></property>
        <property name="interceptorNames" value="beforeAdvice"></property>
    </bean>
</beans>

单测

//2.BeanName自动代理生成器
    @Test
    public void test04(){
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext08_aop08_BeanNamezidonAgent.xml");
        ISomeService service = (ISomeService) ctx.getBean("someService");
        service.doSome();
        service.doSecont();
    }
时间: 2024-10-23 08:36:33

自动代理生成器的相关文章

spring8——AOP之Bean的自动代理生成器

对于上篇博客http://www.cnblogs.com/cdf-opensource-007/p/6464237.html结尾处提到的两个问题,可以使用spring提供的自动代理生成器解决.自动代理生成器可以让我们把切面织入目标对象方法时不用再使用ProxyFactoryBean这个类来生成代理对象了,同时可以把切面织入多个代理代理对象,并且在获取代理对象时使用的是目标对象的id来获取,这符合正常的使用习惯. spring提供了两个自动代理生成器,一个是DefaultAdvisorAutoPr

SSM-Spring-15:Spring中名称自动代理生成器BeanNameAutoProxyCreator

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 名称自动代理生成器:BeanNameAutoProxyCreator 为了更好的测试,我放了俩个接口,俩个实现类: ISomeService接口: package cn.dawn.day18auto02; /** * Created by Dawn on 2018/3/8. */ public interface ISomeService { public void insert(); public voi

Spring(十一)--代理生成器

Spring代理生成器 1.创建需要的dao接口 2.创建需要的daoImpl实现类 3.创建前置增强类 4.创建spring.xml文件 <!-- 这个案例 需要解决的问题: 一个代理工厂 配置 多个目标对象!--> <!--01.配置目标对象--> <bean id="userDao" class="com.xdf.dao.UserDaoImpl"/> <!--为了 测试 会给 所有的bean注入增强--> <

redsocks2 自动代理设置

redsock2 可以把一些不支持透明代理的代理服务器重定向一下,这样可以实现透明代理了 redsock2安装很简单直接make就可以了, ubuntu需要 apt-get intsll libevent-2.0-5 libssl-dev 安装完成后,直接把 redsocks2 复制到相关目录即可. 我这用它做网关, 然后测试了一下,http 和 https 不能一起走,要分开 #http.conf base {   log_debug = off;    log_info = off;   d

PAC 自动代理

最近看了 HTTP权威指南 里面有关于  代理的介绍,代理有很多种,今天主要来说说 自动代理PAC PAC(Proxy Auto Config) 是一个 Script:经由编写这个 Script,我们可以让系统判断在怎么样的情形下,要利用哪一台 Proxy 来进行联机 PAC文件是纯文本格式的,实际上也是个Javascript文件. 在PAC文件中一定要定义 Function FindProxyForURL //参数url是用户输入的url,参数host是url中的主机名. function F

使用BeanNameAutoProxyCreator实现spring的自动代理

提到代理,我们可以使用ProxyBeanFactory,并配置proxyInterfaces,target和interceptorNames实现,但如果需要代理的bean很多,无疑会对spring配置文件的编写带来繁重的工作 Spring为我们提供了,根据beanName匹配后进行自动代理的解决方法 业务接口 package AutoProxyOne;public interface Shopping {  public String buySomething(String type);  pu

Spring《八-一》CGLIB代理和自动代理

CGLIB代理 配置文档 1 <bean id="logProxy" class="org.springframework.aop.framework.ProxyFactoryBean"> 2 <property name="proxyTargetClass"> 3 <value>true</value> 4 </property> 5 <property name="t

Spring AOP使用整理:自动代理以及AOP命令空间

三.自动代理的实现 1.使用BeanNameAutoProxyCreator 通过Bean的name属性自动生成代理Bean. <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames"> <list> <value>*Target</value>

spring(AOP,基于代理AOP实现,自动代理AOP实现,基于AspectJAOP[注解]实现)

----------------AOP------------------ ----------------------基于代理的AOP实现------------------------------------- 1.创建接口类,实现类 2.引入spring支持,勾选AOP支持 3.创建实现类的bean,代理类的bean 4.创建代理类并实现一下两个接口 5.定义切入点 6.定义通知(绑定一个代理),advice--->代理类,pointcut----->切入点 7.定义代理工厂 targe