码迷,mamicode.com
首页 > 编程语言 > 详细

Spring AOP(基于代理类的AOP实现)

时间:2019-02-06 22:26:42      阅读:348      评论:0      收藏:0      [点我收藏+]

标签:out   enc   名称   添加   span   rda   1.0   err   ret   

#基于代理类的AOP实现
step1:
1
package com.sjl.factorybean; 2 /**切面类*/ 3 import org.aopalliance.intercept.MethodInterceptor; 4 import org.aopalliance.intercept.MethodInvocation; 5 6 public class MyAspect implements MethodInterceptor {
7 @Override 8 public Object invoke(MethodInvocation mi) throws Throwable { 9 check_Permission();
//用proceed方法来执行当前对象
10 Object obj=mi.proceed(); 11 log(); 12 return obj; 13 }

//目标方法执行前执行check_Permission方法
14 public void check_Permission(){ 15 System.out.println("模拟检查权限日志"); 16 }

//目标方法执行后执行log()方法
17 public void log(){ 18 System.out.println("模拟记录日志"); 19 } 20 }

 

#目标类

 1 package com.sjl.jdk;
 2 
 3 /**
 4  * UserDaoImpl是目标类,对其中的方法进行增强处理;
 5  */
 6 public class UserDaoImpl implements UserDao{
 7 
 8     @Override
 9     public void addUser() {
10         System.out.println("添加用户");
11     }
12 
13     @Override
14     public void deleteUser() {
15         System.out.println("删除用户");
16     }
17 }

 

技术图片

 

#step2:创建配置文件,并指定代理对象

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xsi:schemaLocation="http://www.springframework.org/schema/beans
 5     http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
 6 
 7     <!-- 1 目标类 id为"userDao"  class="目标类的全限定名" -->
 8     <bean id="userDao" class="com.sjl.jdk.UserDaoImpl"></bean>
 9 
10     <!-- 2 切面类 id为"myAspect"  class="切面类的全限定名"-->
11     <bean id="myAspect" class="com.sjl.factorybean.MyAspect"></bean>
12 
13 
14     <!-- 3 使用Spring代理工厂定义一个名称为userDaoProxy的代理对象,而aop
15      实现的就是代理工厂   bean  id全限定名为如上图-->
16     <bean id="userDaoProxy"
17           class="org.springframework.aop.framework.ProxyFactoryBean">
18 
19         <!-- 3.1 指定代理实现的接口proxyInterfaces value为com.sjl.jdk.UserDao-->
20         <property name="proxyInterfaces" value="com.sjl.jdk.UserDao" />
21 
22         <!-- 3.2 指定目标对象名为target 目标类的对象属性ref为目标类的id-->
23         <property name="target" ref="userDao" />
24 
25         <!-- 3.3 指定切面名interceptorNames,织入环绕通知myAspect -->
26         <property name="interceptorNames" value="myAspect" />
27 
28         <!-- 3.4 指定代理方式,true:使用cglib,false(默认):使用jdk动态代理 -->
29         <property name="proxyTargetClass" value="true" />
30 
31     </bean>
32 </beans>
33 
34 <!--用配置文件指定代理对象,包括目标类、切面类,并指定Spring代理工厂定义一个名称为
35 userDaoProxy的代理对象,其中包含接口的id 代理工厂的类,从aop的包中找,指定接口,再
36 指定属性,接口,目标对象,切面和代理方式等-->

 

#step3:测试类

 1 package com.sjl.factorybean;
 2 import org.springframework.context.ApplicationContext;
 3 import 
 4     org.springframework.context.support.ClassPathXmlApplicationContext;
 5 import com.sjl.jdk.UserDao;
 6 // 测试类
 7 public class ProxyFactoryBeanTest {
 8     public static void main(String args[]) {
 9        String xmlPath = "applicationContext.xml";
10        ApplicationContext applicationContext =new ClassPathXmlApplicationContext(xmlPath);
11        // 从Spring容器获得内容
12        UserDao userDao =  (UserDao) applicationContext.getBean("userDaoProxy");
13        // 执行方法
14        userDao.addUser();
15        userDao.deleteUser();
16     }
17 }

 

Spring AOP(基于代理类的AOP实现)

标签:out   enc   名称   添加   span   rda   1.0   err   ret   

原文地址:https://www.cnblogs.com/shijinglu2018/p/10354091.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!