AOP:Aspect Oriented Programming 面向切面编程,4) AOP采取横向抽取机制,主要用于事务管理、性能监视、安全检查、缓存 、日志。
AspectJ是一个基于Java语言的AOP框架
AOP实现原理
1.jdk动态代理Proxy实现:需要接口+实现类
2.cglib包:只需要实现类
概念 | 描述 |
---|---|
target | 目标类,需要被代理的类 |
Joinpoint | 连接点,可以被拦截的方法 |
PointCut | 已经被增强的连接点 |
advice | 通知增强代码 |
Weaving | 织入,把增强代码advice应用到target上 |
proxy | 代理类 |
aspect | 切面,pointcut和advice的结合 |
例子:
相关包
spring-framework-3.0.2.RELEASE-dependencies\org.aspectj\com.springsource.org.aspectj.weaver\1.6.8.RELEASE
xml配置AOP
<beans>
<!-- 配置UserService,和AOP无关,普通注入-->
<bean id="userService" class="UserServiceImpl"></bean>
<!-- 配置切面对象,advice-->
<bean id="myAspect" class="MyAspect"></bean>
<!-- 配置 aop -->
<aop:config>
<aop:aspect ref="myAspect"><!-- aop:指定切面-->
<!--定义一个切入点-->
<aop:pointcut id="myPointcut" expression="execution(* com.gyf.service.UserServiceImpl.*(..))"/>
<!-- 配置前置通知...-->
<aop:before method="myBefore" pointcut-ref="myPointcut" />
</aop:aspect>
</aop:config>
</beans>
注解配置AOP
bean.xml配置
<!--扫描注解-->
<context:component-scan base-package="demo"/>
<!--AOP注解生效-->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
@Service("userService")//替代xml里的bean
public class UserServiceImpl implements IUserService{}
@Component//替代xml里的bean
@Aspect//替代<aop:config><aop:aspect ref="myAscpect">
public class MyAspect{}
@Before("execution(* demo.UserServiceImpl.*(..))")//替代<aop:pointcut>
public void myBefore(JoinPoint joinPoint){}