Spring Mvc那点事---(30)Spring Mvc传统AOP自动代理实现
来源:互联网 发布:王兀 知乎 编辑:程序博客网 时间:2024/05/16 07:39
Spring 传统AOP可以实现自动代理,不需要专门指定代理,可以在类生成的时候自动代理,有两种方式实现自动代理,基于Bean名称的自动代理
BeanNameAutoProxyCreator和基于切面信息的自动代理DefaultAdvisorAutoProxyCreator
1.BeanNameAutoProxyCreator
package com.springdemo.aopdeom;public class GoodsService { public void Add(){System.out.println("商品添加");}public void Update(){System.out.println("商品修改");}}
前置通知
package com.springdemo.aopdeom;import java.lang.reflect.Method;import org.springframework.aop.MethodBeforeAdvice;//前置通知public class BeforeAdvice implements MethodBeforeAdvice {//参数1是目标方法//参数2是方法参数//参数3是目标对象public void before(Method arg0, Object[] arg1, Object arg2)throws Throwable {// TODO Auto-generated method stub System.out.println("执行前:目标对象"+arg2.getClass().getName()+",方法"+arg0.getName());}}
beanaop.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="goodsService" class="com.springdemo.aopdeom.GoodsService"></bean> <bean id="beforeAdvice" class="com.springdemo.aopdeom.BeforeAdvice"/> <!-- 基于Bean名称的自动代理 --> <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <!-- 拦截的业务bean --> <property name="beanNames" value="*goodsService"/> <!-- 拦截的通知 --> <property name="interceptorNames" value="beforeAdvice"/> </bean></beans>
package com.springdemo.aopdeom;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * Hello world! * */public class App { public static void main( String[] args ) { ApplicationContext context = new ClassPathXmlApplicationContext("classpath:com/springdemo/aopdeom/beanaop.xml"); GoodsService goodsService=(GoodsService)context.getBean("goodsService"); goodsService.Add(); goodsService.Update(); }}
2.DefaultAdvisorAutoProxyCreator
defaultaop.xml
<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="goodsService" class="com.springdemo.aopdeom.GoodsService"></bean> <bean id="beforeAdvice" class="com.springdemo.aopdeom.BeforeAdvice"/> <!-- 配置切面信息 --> <bean id="advisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> <property name="advice" ref="beforeAdvice"/> <property name="pattern" value=".*Add.*"/> <!-- 匹配添加方法 --> </bean> <!-- 配置基于切面信息自动代理 --> <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/></beans>
package com.springdemo.aopdeom;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * Hello world! * */public class App { public static void main( String[] args ) { ApplicationContext context = new ClassPathXmlApplicationContext("classpath:com/springdemo/aopdeom/defaultaop.xml"); GoodsService goodsService=(GoodsService)context.getBean("goodsService"); goodsService.Add(); goodsService.Update(); }}
0 0
- Spring Mvc那点事---(30)Spring Mvc传统AOP自动代理实现
- Spring Mvc那点事---(28)Spring Mvc基于ProxyFactoryBean的传统AOP
- Spring Mvc那点事---(29)Spring Mvc基于ProxyFactoryBean的传统AOP使用正则拦截
- Spring Mvc那点事---(26)Spring Mvc基于Schema的AOP实现
- Spring Mvc那点事---(27)Spring Mvc基于aspect的AOP实现
- Spring Mvc那点事---(33)Spring事务基于AOP实现
- Spring Mvc那点事---(3)Spring Mvc项目创建
- Spring Mvc那点事---(4)Spring Mvc控制器Controller
- Spring Mvc那点事---(7)Spring Mvc @Autowired注解
- Spring Mvc那点事---(8)Spring Mvc @Resource注解
- Spring Mvc那点事---(9)Spring Mvc @Component注解
- Spring Mvc那点事---(18)Spring Mvc过滤器Filter
- Spring Mvc那点事---(21)Spring Mvc拦截器
- Spring Mvc那点事---(23)Spring Mvc监听器
- Spring Mvc那点事---(19)Spring Mvc过滤器Filter实现登陆验证
- Spring Mvc那点事---(38)MVC执行流程
- Spring Mvc那点事---(40)SSM服务框架使用aop进行数据验证
- Spring Mvc那点事---(31)Spring事务管理
- MyEclipse安装JS代码提示(Spket插件)
- linux管理员root账号搭建ftp服务怎么让其他账户访问
- HDU 3001 Travelling (状压DP)
- Git学习之路(一) 建立版本库并实现文件操作
- Windows环境下搭建React Native
- Spring Mvc那点事---(30)Spring Mvc传统AOP自动代理实现
- Cocos2d-x 手游聊天系统Demo实现(Lua实现)
- HDU1754题解
- [UnityShader3]彩光效果
- 96. Unique Binary Search Trees
- 长沙面试总结
- FPGA笔记(十)-正确初始化的重要性
- 实现RecyclerView的监听
- Remove Element