springmvc里的Aop

通过代理对象来调用原对象的方法

代理对象方法前后都可以插入代码,这些代码就是增强处理

实现方法:动态代理设计模式

log4j.properties

#rootlogger是所有日志的根日志,修改该日志属性将对所有日志起作用

#下面的属性配置中,所有日志的输出级别是debug,输出源是console

log4j.rootLogger = debug,console

#定义输出源的输入位置是控制台

log4j.appender.console=org.apache.log4j.ConsoleAppender

#定义输出日志的布局采用的类

log4j.appender.console.layout=org.apache.log4j.PatternLayout

#定义日志输出布局

log4j.appender.console.layout.ConversionPattern=%d %p [%c] - %m%n


public  void testBiz() {

Logger logger = Logger.getLogger(TestBiz.class);
logger.debug("业务方法开始执行");
try {
System.out.println("执行业务逻辑");
dao.testDao();
throw new Exception("故意的!");
} catch (Exception e) {
logger.error("出错了!", e);
}
}


AOP相关术语
增强( Advice)
切入点( Pointcut)
连接点( Joinpoint)
切面( Aspect)
代理( Proxy)
目标对象( Target)
织入( Weaving)


增强+切入点=切面(织入的操作)

AspectJ
Jboss AOP
Spring AOP

Spring 提供了4种实现AOP的方式
基于代理的经典AOP
纯POJO切面 schema 普通的java类(struts里action)
@AspectJ注解驱动的切面
注入式AspectJ切面


为项目添加Spring的AOP支持
spring-aop-3.2.13.RELEASE.jar
aopalliance-1.0.jar
aspectjweaver-1.6.9.jar
cglib-nodep-2.1.3.jar(已内联在Spring core中)
编写目标方法和增强处理
在Spring配置文件中定义切入点
在切入点织入增强处理


切入点:简单的说,就是连接点的查询条件
表达式匹配规则举例
<aop:pointcut id="servicePointcut"
expression="execution(public * com.pb.service.*.*(..))" />
public * addUser(com.pb.entity.User)"*"表示匹配所有类型的返回值
public void *(com.pb.entity.User)"*"表示匹配所有方法名
public void addUser (..)".. "表示匹配所有参数个数和类型
* com.pb.service.*.*(..):匹配com.pb.service包下所有类的所有方法
* com.pb.service..*(..):匹配com.pb.service包及子包下所有类的所有方法


<!-- 增强 -->
	 <bean id="TestLogger" class="com.beta.logger.TestLogger"/>
	<aop:config>
	<!-- 切点 -->
		<aop:pointcut expression="execution(public * biz..*(..))" id="pointcut"/>
		<aop:aspect ref="testLogger">
		<!-- 把什么的方法放到符合的表达式里  -->
			<aop:before method="beforeLogger" pointcut-ref="pointcut"/>
			<aop:after-returning method="afterLogger" pointcut-ref="pointcut"
			returning="result"/>
		</aop:aspect>
	</aop:config> 



public void beforeLogger(JoinPoint jp,Object result){
		
		logger.debug("begin.........");
		System.out.println("连接点对象:"+jp.getTarget().getClass().getSimpleName());
		System.out.println("连接点方法:"+jp.getSignature().getName());
		System.out.println("连接点参数:"+jp.getArgs());
		System.out.println("返回值:"+result);
	}

Spring AOP代理机制
JDK动态代理(面向接口的代理,必须是接口,创建快,运行慢)
java.lang.reflect.InvocationHandler
java.lang.reflect.Proxy
CGLib动态代理(创建慢,运行快,内存中继承父类)

<aop:config proxy-target-class="true">




对象的方法
通过代理对象来调用原
对象的方法
代理对象来调用原
对象的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值