spring aop的自动代理
BeanNameAutoProxyCreator为名字匹配字符串或者通配符的bean自动创建AOP代理。
java 代码
- public class AutoBean {
-
- public void foo() {
- System.out.println("foo()");
- }
- }
通知
java 代码
- package aop;
-
- import java.lang.reflect.Method;
-
- import org.springframework.aop.MethodBeforeAdvice;
-
- public class SimpleBeforeAdvice implements MethodBeforeAdvice{
-
- public void before(Method method, Object[] arg1, Object arg2) throws Throwable {
-
- System.out.println("Bofore method:"+ method );
- }
-
- }
配制
java 代码
- "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
- <beans> </beans>
-
- class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
-
-
<list> </list>
- <value>foo*</value>
- <value>barBean</value>
-
-
-
-
<list> </list>
- <value>advice</value>
-
-
-
-
-
-
-
-
test
java 代码
- package aop;
-
- import org.springframework.aop.support.AopUtils;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.FileSystemXmlApplicationContext;
-
- public class IntroductionConfigExample {
-
- public static void main(String[] args) {
- ApplicationContext ctx = new FileSystemXmlApplicationContext(
- "./src/beans.xml");
-
- AutoBean autoBean = (AutoBean)ctx.getBean("fooBean");
- AutoBean autoBean1 = (AutoBean)ctx.getBean("barBean");
-
-
- autoBean.foo();
- System.out.println(AopUtils.isAopProxy(autoBean));
-
-
-
-
-
- }
- }
-
DefaultAdvisorAutoProxyCreator
一个更加通用而且强大得多的自动代理创建器是DefaultAdvisorAutoProxyCreator
。它自动应用当前上下文中适当的advisor,无需在自动代理advisor的bean定义中包括bean的名字。 比起BeanNameAutoProxyCreator
,它提供了同样关于一致性配置的优点而避免了前者的重复性。
可以向每个业务对象应用任意数量的advisor。对于一个业务对象,如果没有任何advisor中的切入点匹配它的任何方法,这个对象将不会被代理。
java 代码
- package aop2;
-
- public class AutoBean {
-
- public void foo() {
- System.out.println("foo()");
- }
- }
java 代码
- package aop2;
- public class OtherBean {
-
- public void foo() {
- System.out.println("foo()");
- }
- }
java 代码
- package aop2;
-
- import java.lang.reflect.Method;
-
- import org.springframework.aop.MethodBeforeAdvice;
-
- public class SimpleBeforeAdvice implements MethodBeforeAdvice{
-
- public void before(Method method, Object[] arg1, Object arg2) throws Throwable {
-
- System.out.println("Bofore method:"+ method );
- }
-
- }
定义pointcut
java 代码
- package aop2;
-
- import org.springframework.aop.ClassFilter;
- import org.springframework.aop.MethodMatcher;
- import org.springframework.aop.Pointcut;
-
- public class MyPointcut implements Pointcut {
-
- public ClassFilter getClassFilter() {
- return new ClassFilter() {
-
- public boolean matches(Class cls) {
- return (cls == AutoBean.class); //只代理autobean
- }
- };
- }
-
- public MethodMatcher getMethodMatcher() {
- return MethodMatcher.TRUE;
- }
- }
java 代码
- package aop2;
-
- import org.springframework.aop.support.AopUtils;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.FileSystemXmlApplicationContext;
-
- public class DefaultCreatorExample {
- public static void main(String[] args) {
- ApplicationContext ctx = new FileSystemXmlApplicationContext(
- "./src/beans1.xml");
-
- AutoBean autoBean = (AutoBean)ctx.getBean("autoBean");
- OtherBean otherBean = (OtherBean)ctx.getBean("otherBean");
-
- autoBean.foo();
- System.out.println(AopUtils.isAopProxy(autoBean));
-
- otherBean.foo();
- System.out.println(AopUtils.isAopProxy(otherBean));
- }
-
- }
配制
<beans><bean id="proxyCreator"><bean id="autoBean" class="aop2.AutoBean"><bean id="otherBean" class="aop2.OtherBean"><bean id="advisor">
<property name="pointcut">
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="proxyCreator">
class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>
<bean id="autoBean" class="aop2.AutoBean">
<bean id="otherBean" class="aop2.OtherBean">
<bean id="advisor">
class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="pointcut">
<bean class="aop2.MyPointcut">
</bean>
<property name="advice">
<bean class="aop2.SimpleBeforeAdvice">
</bean>
</property>
</property>
<bean class="aop2.MyPointcut">
</bean>
<property name="advice">
<bean class="aop2.SimpleBeforeAdvice">
</bean>
</property>
</bean> </bean></bean></bean></beans></property>
</bean></bean></bean></bean></beans>
分享到:
相关推荐
本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际应用。 1. **核心概念** - **切面(Aspect)**:切面是关注点的模块化,包含业务逻辑之外的横切关注点,如日志、事务管理。 - **连接点(Join Point...
本笔记将深入探讨这两个概念以及它们在Spring中的实现。 1. Spring框架简介: Spring作为一个轻量级的开源框架,旨在简化企业级应用的开发。它通过提供IOC容器,实现了对象的创建、管理和依赖注入,减轻了开发者对...
**Spring AOP 学习笔记及实现Demo** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。AOP的主要目的...
Spring AOP 源码分析笔记 Spring AOP(Aspect-Oriented Programming)是一种编程范式,它允许开发者 modularize cross-cutting concerns,即将横切关注点模块化。AOP 使得开发者可以将一些公共的功能模块化,以便在...
SSH-AOP笔记主要涵盖的是Spring、Struts和Hibernate三大框架集成使用时,如何结合Aspect Oriented Programming(面向切面编程)的理念进行应用增强。在Java企业级开发中,SSH是常用的MVC架构,而AOP则是一种编程范式...
NULL 博文链接:https://linres.iteye.com/blog/281221
Spring Aop 学习笔记
【Spring AOP源码笔记】 Spring AOP是Spring框架的核心组件之一,它实现了面向切面编程(Aspect-Oriented Programming,简称AOP),允许开发者定义“切面”,这些切面可以封装横切关注点,如日志记录、事务管理等。...
Spring_AOP,全称为Spring的面向切面编程,是一种编程范式,旨在将关注点分离,使得代码结构更清晰,可维护性更强。在传统的面向对象编程(OOP)中,我们通常会将业务逻辑与系统服务(如日志、事务管理等)混杂在...
本笔记主要探讨了如何在Spring应用中使用AOP来实现横切关注点,如日志、事务管理、性能监控等。 首先,理解AOP的基本概念至关重要。AOP的核心是切面(Aspect),它封装了跨越多个对象的行为或责任。切面由两个主要...
**Spring AOP 知识点详解** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它允许程序员定义“切面”,这些切面可以封装跨越多个对象的行为,比如日志、事务管理等。AOP...
2. **Spring AOP(Aspect Oriented Programming,面向切面编程)**: AOP允许开发者定义"横切关注点",这些关注点与业务逻辑分离,可以处理如日志记录、事务管理、安全检查等通用任务。在Spring中,切面通过`@...
2. **启用AOP代理**:在Spring配置中启用AOP代理,可以使用注解`@EnableAspectJAutoProxy`。 ```java @Configuration @EnableAspectJAutoProxy public class AppConfig { // ... } ``` 3. **切点表达式**:`...
Spring的AOP开发(XML)Spring的AOP的注解开发 代码案例
JAVA Spring AOP面向切面编程笔记
2. **容器(IoC Container)**:Spring容器负责创建对象、管理对象的生命周期以及维护对象间的依赖关系。主要有两种类型的容器:BeanFactory和ApplicationContext。 3. **面向切面编程(Aspect-Oriented ...
Spring的核心特性是控制反转(IOC)和面向切面编程(AOP)。它提供了一个全面的编程和配置模型,可以用于构建各种类型的Java应用程序,包括Web应用。 1. **Spring介绍** - **侵入式概念**:传统Java EE应用中,...
### Spring学习笔记(精华全记录) #### Spring框架概述 Spring框架源自Rod Johnson的个人项目,最初于2002年末发布。Spring并非一开始就作为一个完整的框架出现,而是从一个项目逐步发展而来。随着项目的成熟,...
2. **面向切面编程(AOP)**: AOP允许在不修改业务代码的情况下,实现如日志记录、性能监控等横切关注点。`spring_aop.txt`可能涵盖了切面、通知类型、切点表达式和AOP代理的详细知识。 3. **Spring与JDBC的整合**:...