文档章节

AOP应用

绿林小子
 绿林小子
发布于 2015/11/12 16:03
字数 733
阅读 69
收藏 0
AOP
    1. 层次结构图

    2. 代码示例
package com.lxh.aopApply;

public class User { // 属性
	public String name;
	public int age;
	// constructor
	public User(){		
	}
	// set,get
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}	
}

package com.lxh.aopApply;

public interface UserDao {
	// 普通用户做普通事情
	public void doCommonThings();
	// 管理员做管理员事情
	public void doAdminThings();
}

package com.lxh.aopApply;

public class UserDaoImpl implements UserDao {
	@Override
	public void doCommonThings() {
		System.out.println("Do something as a common user...");
	}
	@Override
	public void doAdminThings() {
		System.out.println("Do something as an admin user...");
	}
}

package com.lxh.aopApply;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

public class AuthorityInterceptor implements MethodInterceptor {
	// 属性
	private User user; // user
	// set,get
	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	@Override
	public Object invoke(MethodInvocation arg0) throws Throwable {
		String methodName = arg0.getMethod().getName();
             	System.out.println(methodName);// 需要调用的方法名称
		Object obj = null;
                // 权限鉴别
		if (null == user.getName() && !"user".equals(user.getName())
				&& !"admin".equals(user.getName())) {
			return obj;
		} else {
			if ("doAdminThings".equals(methodName)) {
				// 只能admin用户调用
				if ("admin".equals(user.getName())) {
					obj = arg0.proceed();
				}
			} else {
				// admin和user都能调用
				obj = arg0.proceed();
			}
			return obj;
		}
	}
}
package com.lxh.aopApply;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
// 测试类
public class AopTest {
	public static void main(String[] args) {
		// URL
		String url = AopTest.class.getResource("").getPath();
                System.out.println(methodName);
		// 创建Spring容器
		ApplicationContext ctx = new FileSystemXmlApplicationContext(url+"/applicationContext.xml");
		// 获取代理对象
		UserDao ud = (UserDao) ctx.getBean("proxyObject");
		// 执行方法
		ud.doAdminThings(); // 调用管理员方法
		ud.doCommonThings();// 调用普通方法
	}
}

    3. 普通用户测试applicationContext.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:sofa="http://img.alipay.net/dtd/schema/service" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:webflow="http://www.springframework.org/schema/webflow-config"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
         http://img.alipay.net/dtd/schema/service http://img.alipay.net/dtd/schema/service/sofa-service.xsd  
         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd  
         http://www.springframework.org/schema/webflow-config http://www.springframework.org/schema/webflow-config/spring-webflow-config-2.0.xsd"
	default-autowire="byName">
	<!-- User -->
	<bean id="user" class="com.lxh.aopApply.User">
		<property name="name">
			<value>user</value>
		</property>
		<property name="age">
			<value>24</value>
		</property>
	</bean>
	<!-- 代理的目标类 -->
	<bean id="beanTarget" class="com.lxh.aopApply.UserDaoImpl" />
	<!-- 拦截器 -->
	<bean id="myInterceptor" class="com.lxh.aopApply.AuthorityInterceptor">
		<property name="user" ref="user" />
	</bean>
	<!-- 代理工厂 -->
	<bean id="proxyObject" class="org.springframework.aop.framework.ProxyFactoryBean">
		<property name="proxyInterfaces">
			<value>com.lxh.aopApply.UserDao</value>
		</property>
		<property name="interceptorNames">
			<list>
				<value>myInterceptor</value>
				<value>beanTarget</value>
			</list>
		</property>
	</bean>
</beans>



    4. 管理员测试applicationContext.xml配置


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:sofa="http://img.alipay.net/dtd/schema/service" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:webflow="http://www.springframework.org/schema/webflow-config"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
         http://img.alipay.net/dtd/schema/service http://img.alipay.net/dtd/schema/service/sofa-service.xsd  
         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd  
         http://www.springframework.org/schema/webflow-config http://www.springframework.org/schema/webflow-config/spring-webflow-config-2.0.xsd"
	default-autowire="byName">
	<!-- User -->	
	<bean id="admin" class="com.lxh.aopApply.User">
		<property name="name">
			<value>admin</value>
		</property>
		<property name="age">
			<value>25</value>
		</property>
	</bean>
	<!-- 代理的目标类 -->
	<bean id="beanTarget" class="com.lxh.aopApply.UserDaoImpl" />

	<!-- 拦截器 -->
	<bean id="myInterceptor" class="com.lxh.aopApply.AuthorityInterceptor">
		<property name="user" ref="admin" />
	</bean>
	<!-- 代理工厂 -->
	<bean id="proxyObject" class="org.springframework.aop.framework.ProxyFactoryBean">
		<property name="proxyInterfaces">
			<value>com.lxh.aopApply.UserDao</value>
		</property>

		<property name="interceptorNames">
			<list>
				<value>myInterceptor</value>
				<value>beanTarget</value>
			</list>
		</property>
	</bean>
</beans>
    4. 测试结果
       普通用户

       管理员

    5. 测试结果分析
       普通用户调用的方法

@Override
	public void doCommonThings() {
		System.out.println("Do something as a common user...");
	}
       管理员调用的方法
@Override
	public void doAdminThings() {
		System.out.println("Do something as an admin user...");
	}

@Override
	public void doCommonThings() {
		System.out.println("Do something as a common user...");
	}
       这是AOP的一个应用:权限鉴别。在调用方法之前进行一些处理。

© 著作权归作者所有

绿林小子
粉丝 5
博文 131
码字总数 45566
作品 0
福州
私信 提问
AOP(一)

AOP通常被称为实现横切关注点的工具. 横切关注点:一般是不能从应用程序中分离出来,但同时又导致代码重复,紧密耦合的业务逻辑. 最常见的横切关注点:dao层的数据库操作.操作数据时(增加,更新,...

木子丰
2016/07/24
50
0
Aspectj与Spring AOP比较

1、简介 今天有多个可用的 AOP 库, 它们需要能够回答许多问题: 是否与用户现有的或新的应用程序兼容? 在哪里可以实现 AOP? 与自己的应用程序集成多快? 性能开销是多少? 在本文中, 我们将...

沈渊
2018/04/18
0
0
之 横切关注点、通知、切点、连接点、引入、织入、创建切点

知识背景 软件系统可以看成是由一组关注点组成的,其中,直接的业务关注点,是直切关注点。而为直切关注点提供服务的,就是横切关注点。 面向切面的基本原理 什么是面向切面编程 横切关注点:...

ZHAOBEN
2016/05/05
206
0
Spring(四):面向切面编程AOP

横切关注点:分布于应用中多处的功能 面向切面编程AOP:将横切关注点与业务逻辑相分离 在使用面向切面编程时,仍在一个地方定义通用功能,但是可以通过声明的方式定义这个功能以何种方式在何...

_Roger_
2015/09/09
446
0
框架Spring.NET之面向切面(AOP)

文章开头我们需要了解几个概念,如:什么是面向切面编程?它的发展及其优势是什么?首先我们来共同了解下什么面向切面编程,又称作AOP。 AOP(Aspect-Oriented Programming)是对OOP的一种补...

李朝强
2015/12/31
176
0

没有更多内容

加载失败,请刷新页面

加载更多

Giraph源码分析(八)—— 统计每个SuperStep中参与计算的顶点数目

作者|白松 目的:科研中,需要分析在每次迭代过程中参与计算的顶点数目,来进一步优化系统。比如,在SSSP的compute()方法最后一行,都会把当前顶点voteToHalt,即变为InActive状态。所以每次...

数澜科技
今天
4
0
Xss过滤器(Java)

问题 最近旧的系统,遇到Xss安全问题。这个系统采用用的是spring mvc的maven工程。 解决 maven依赖配置 <properties><easapi.version>2.2.0.0</easapi.version></properties><dependenci......

亚林瓜子
今天
10
0
Navicat 快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ...

低至一折起
今天
10
0
Set 和 Map

Set 1:基本概念 类数组对象, 内部元素唯一 let set = new Set([1, 2, 3, 2, 1]); console.log(set); // Set(3){ 1, 2, 3 } [...set]; // [1, 2, 3] 接收数组或迭代器对象 ...

凌兮洛
今天
4
0
PyTorch入门笔记一

张量 引入pytorch,生成一个随机的5x3张量 >>> from __future__ import print_function>>> import torch>>> x = torch.rand(5, 3)>>> print(x)tensor([[0.5555, 0.7301, 0.5655],......

仪山湖
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部