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 void delete();
    public void select();
    public void update();
}

  它的实现类:SomeServiceImpl

package cn.dawn.day18auto02;

/**
 * Created by Dawn on 2018/3/8.
 */
public class SomeServiceImpl implements ISomeService {

    public void insert() {
        System.out.println("insert ok");
    }

    public void delete() {
        System.out.println("delete ok");

    }

    public void select() {
        System.out.println("select ok");

    }

    public void update() {
        System.out.println("update ok");

    }
}

  IBookService接口:

package cn.dawn.day18auto02;

/**
 * Created by Dawn on 2018/3/12.
 */
public interface IBookService {
    public void selectAllBooks();
}

  它的实现类:BookServiceImpl

package cn.dawn.day18auto02;

/**
 * Created by Dawn on 2018/3/12.
 */
public class BookServiceImpl implements IBookService {
    public void selectAllBooks() {
        System.out.println("selectbooks ok");
    }
}

  一个增强的

package cn.dawn.day18auto02;

import org.springframework.aop.MethodBeforeAdvice;

import java.lang.reflect.Method;

/**
 * Created by Dawn on 2018/3/5.
 */
/*前置增强*/
public class LoggerBefore implements MethodBeforeAdvice {
    public void before(Method method, Object[] objects, Object o) throws Throwable {
        System.out.println("日志记录");
    }
}

  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"
       xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
       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">
    <!--要增强的对象-->
    <bean id="service" class="cn.dawn.day18auto02.SomeServiceImpl"></bean>
    <bean id="bookservice" class="cn.dawn.day18auto02.BookServiceImpl"></bean>
    <!--增强的内容-->
    <bean id="myadvice" class="cn.dawn.day18auto02.LoggerBefore"></bean>
    <!--顾问-->
    <bean id="myadvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
        <property name="advice" ref="myadvice"></property>
        <!--<property name="mappedNames" value="do*"></property>-->
        <!--<property name="pattern" value=".*do.*"></property>-->
        <property name="patterns" value=".*e.*"></property>
    </bean>
    <!--名称自动代理生成器-->
    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
        <property name="beanNames" value="service,bookservice"></property>
        <property name="interceptorNames" value="myadvisor"></property>
    </bean>

</beans>

  此处没有顾问是不行的,名称自动代理生成器BeanNameAutoProxyCreator中的beanNames的值是String类型的数组,所以可以放多个目标对象,用逗号隔开即可

  单测方法:

package cn.dawn.day18auto02;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Created by Dawn on 2018/3/3.
 */
public class test20180312 {
    @Test
    /*aop代理工厂bean异常增强*/
    public void t01(){
        ApplicationContext context=new ClassPathXmlApplicationContext("ApplicationContext-day18auto02.xml");
        ISomeService service = (ISomeService) context.getBean("service");
        IBookService bookservice = (IBookService) context.getBean("bookservice");

        service.select();
        bookservice.selectAllBooks();

    }
}

原文地址:https://www.cnblogs.com/DawnCHENXI/p/8550837.html

时间: 2024-10-31 03:16:01

SSM-Spring-15:Spring中名称自动代理生成器BeanNameAutoProxyCreator的相关文章

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

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

自动代理生成器

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

SSM-Spring-14:Spring中默认自动代理DefaultAdvisorAutoProxyCreator

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 默认自动代理DefaultAdvisorAutoProxyCreator 本处没有什么要讲的,放原代码 ISomeService接口: package cn.dawn.day17atuo01; /** * Created by Dawn on 2018/3/8. */ public interface ISomeService { public void insert(); public void dele

spring:按照Bean的名称自动装配User

本实例将介绍如何按照Bean 的名称自动装配 User 对象! <bean> 元素的 autowire 属性负责自动装配 <bean> 标签,定义 JavaBean 的属性.这样做可以省去很多配置 JavaBean 属性的标签代码,使代码更整洁.美观: 但是也有负面影响:使用自动装配之后,无法从配置文件中读懂 JavaBean 需要什么属性. 1.编写User 对象,代码如下: package com.importnew; public class User { private S

spring(15)------spring的事务处理

一,了解事务处理 1.1 基本概念 事务处理在运用程序中起着至关重要的作用,事务处理由若干个步骤组成,这些步骤间有着各种各样的逻辑关系, 一个事务中的所有步骤必须同时成功或失败.当所有步骤操作成功时,事务算完成,而当某个事务操作失败, 所有的步骤都需要回滚.对于提交和回滚的概念说明: 提交(commit):当所有的步骤被完整执行完成时,称该事务被提交. 回滚(rollback):当某个步骤操作异常时,所有的步骤都不能被提交,必须进行回滚,回滚到执行前的状态. 1.2事务处理的特征 原子性(Ato

Spring AOP: Spring之面向方面编程

Spring AOP: Spring之面向方面编程 面向方面编程 (AOP) 提供从另一个角度来考虑程序结构以完善面向对象编程(OOP). 面向对象将应用程序分解成 各个层次的对象,而AOP将程序分解成各个方面 或者说 关注点 . 这使得可以模块化诸如事务管理等这些横切多个对象的关注点.(这些关注点术语称作 横切关注点.) Spring的一个关键组件就是AOP框架. Spring IoC容器(BeanFactory 和ApplicationContext)并不依赖于AOP, 这意味着如果你不需要

使用BeanNameAutoProxyCreator实现spring的自动代理

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

Spring中的自动装配案例分析

Spring_Autowiring collaborators 在Spring3.2.2中自动装配类型,分别为:no(default)(不采用自动装配).byName,byType,constructor下面来分别介绍一下这些是如何自动装配的 <bean id="foo" class="...Foo" autowire="autowire type"> Mode Explanation no (Default) No autowiri

Spring AOP中的动态代理

0  前言 1  动态代理 1.1 JDK动态代理 1.2 CGLIB动态代理 1.2.1 CGLIB的代理用法 1.2.2 CGLIB的过滤功能 2  Spring AOP中的动态代理机制 2.1 JdkDynamicAopProxy 2.2 CglibAopProxy 3 总结 0  前言 前一个季度旅游TDC的Thames服务有几次宕机,根据组内原因认真查找发现是数据库事务造成的,后来把服务中的事务配置全部去掉,服务恢复正常.根据这次教训,虽然现在还是很难确定是哪一个方面的真正原因,但是激