Spring AOP设计

Spring IOC设计到的设计模式: 工厂模式,模板方法模式,单例模式

Spring AOP涉及到的设计模式: 工厂模式,代理模式

 

1、Spring AOP目标

将分散在程序各处的横切关注点剥离出来,并以集中的方式进行表达

使得开发人员专注于业务逻辑的实现而非繁杂的非功能代码,简化了程序编写与单元测试

应用场景:

  日志

  安全

  事务

 

2、AOP核心概念

Advice(通知)

  定义在连接点处的行为,围绕方法调用而进行注入

Pointcut(切点)

  确定在哪些连接点处应用通知

Advisor(通知器)

  组合Advice和Pointcut

 

3、Spirng AOP实现

ProxyFactoryBean

  --FactoryBean implementation that builds an  AOP proxy based on beans in Spring BeanFactory.

  --Spring AOP的底层实现与源头

 

4、ProxyFactoryBean的典型配置

 

 5、ProxyFactoryBean的构成

target

  目标对象,需要对其进行切面增强

proxyInterfaces

  代理对象所实现的接口

interceptorNames

  通知器(Advisor)列表,通知器中包含了通知(Advice)与切入点(Pointcut)

 

6、ProxyFactoryBean的作用 

  总的来说,ProxyFactoryBean的作用可用下面这句话概括

  针对目标对象来创建代理对象,将对目标对象方法的调用转到对相应代理对象方法的调用,并且可以在代理对象方法调用前后执行与之匹配的各个通知器定义好的方法。

 

7、目标代理对象的创建

Spring通过两种方式来创建目标对象

  JDK动态代理

  CGLIB

 

8、JDK动态代理

如果目标对象实现了接口,那么Spring就会通过JDK动态代理为目标对象生成代理对象

 

 

9、DefaultAopProxyFactory

	public AopProxy createAopProxy(AdvisedSupport config) throws AopConfigException {
		if (config.isOptimize() || config.isProxyTargetClass() || hasNoUserSuppliedProxyInterfaces(config)) {
			Class targetClass = config.getTargetClass();
			if (targetClass == null) {
				throw new AopConfigException("TargetSource cannot determine target class: " +
						"Either an interface or a target is required for proxy creation.");
			}
			if (targetClass.isInterface()) {
				return new JdkDynamicAopProxy(config);
			}
			if (!cglibAvailable) {
				throw new AopConfigException(
						"Cannot proxy target class because CGLIB2 is not available. " +
						"Add CGLIB to the class path or specify proxy interfaces.");
			}
			return CglibProxyFactory.createCglibProxy(config);
		}
		else {
			return new JdkDynamicAopProxy(config);
		}
	}

  

 

猜你喜欢

转载自www.cnblogs.com/linlf03/p/11184428.html
0条评论
添加一条新回复