简单介绍一下代理模式:(可以直接跳过,或者看狂神的spring网课,个人觉得挺详细的)
静态代理:
角色分析;
抽象角色:一般会使用接口或者抽象类来解决
真实角色:本代理的角色
代理角色:代理的真实角色,代理真实角色后,我们一般会做一些附属操作
客户:访问代理对象的人。
动态代理:
动态代理和静态代理角色一样
动态代理的代理类是动态生成的,不是我们直接写好的
动态代理分成两大类:基于接口的动态代理,基于类的动态代理
基于接口的—jdk动态代理(我们在这里使用)
基于类:cglib
java字节码实现:javasist
需要了解两个类:
porxy:代理,invocationHander:调用处理程序
AOP实现实例:
开发步骤:
创建切面类,在界面类定义切点方法
将切面类配置给spring容器
声明切入点
配置AOP通知策略
一:导入依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.13.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.13.RELEASE</version>
</dependency>
二:定义切面类
public class lingdu{
public void before(){
system.out.println("--------")
}
三:交给spring容器
声明切入点:
这里使用方式一自定义类 -->
<!-- <bean id="ligndu" class="com.zhagn"/>-->
<!-- <aop:config>-->
<!--<!– 自定义切面。ref要引用的类–>-->
<!-- <aop:aspect ref="lingdu">-->
<!-- 切入点>
<aop:pointcut id="point" expression="execution(* com.zhang.UserServiceImpl.*(..))"/>-->
<!--<!– 通知–>-->
<!-- <aop:before method="before" pointcut-ref="point"/>-->
<!-- </aop:aspect>-->
<!-- </aop:config>-->
<!-- 方式二注解实现AOP-->
<bean id="lingdu" class="com.zhang "/>
<!--开启注解支持-->
<aop:aspectj-autoproxy/>
</beans>
注解类:
@Aspect//标明这是一个注解类
public class lingdu{
@Before(execution(* com.zhang.UserServiceImpl.*(..))")
public void before(){
system.out.println("-----方法执行前"}
}
这里还有两个方法就不写了,一个是@After,一个是@Around