文档章节

spring aop 基于xml配置版

LikesWinds
 LikesWinds
发布于 2016/03/11 23:05
字数 850
阅读 9
收藏 0

maven

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.myaop</groupId>
	<artifactId>spring-aop</artifactId>
	<version>1.0</version>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<spring.version>3.1.2.RELEASE</spring.version>
	</properties>
	<build />
	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- spring end -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>1.6.12</version>
		</dependency>
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.6.12</version>
		</dependency>
		<dependency>
			<groupId>cglib</groupId>
			<artifactId>cglib</artifactId>
			<version>2.2</version>
		</dependency>
		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
			<version>2.2.2</version>
		</dependency>
	</dependencies>
</project>

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:util="http://www.springframework.org/schema/util"
	xmlns:p="http://www.springframework.org/schema/p" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
    http://www.springframework.org/schema/mvc
	http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
      http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-2.5.xsd">
	<!-- 自動掃描 -->
	<context:component-scan base-package="com.spring"></context:component-scan>
	<context:component-scan base-package="com.aop"></context:component-scan>
	<bean id="aspectAop" class="com.aop.Aop"></bean>
	<aop:config>
		<aop:pointcut id="pc" expression="execution(* com.spring..*.*Do(..)) " />
		<aop:aspect id="aspect" ref="aspectAop">
			<aop:around method="doAround" pointcut-ref="pc" />
		</aop:aspect>
	</aop:config>

</beans>
package com.aop; 
import javax.annotation.Resource;

import org.springframework.aop.framework.AopInfrastructureBean;
import org.springframework.ui.ModelMap;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.reflect.MethodSignature;
//import org.aspectj.lang.annotation.After;
//import org.aspectj.lang.annotation.AfterReturning;
//import org.aspectj.lang.annotation.AfterThrowing;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Before;
//import org.aspectj.lang.annotation.Pointcut;
//import org.springframework.stereotype.Component;
//import org.springframework.stereotype.Repository;
 

//@Repository
//@Component
//@Aspect
public class Aop implements AopInfrastructureBean {
	private Boolean success = true;
	private String err = "";

	//@Pointcut("execution(* com.spring..*.*Do(..)) ")
	public void pointCut() {
	}

	//@Before("@annotation(auth)") 
	public void before(JoinPoint joinPoint, Resource res) {
		res.toString();
		System.out.println(res);
		// //如果需要这里可以取出参数进行处理
		// Object[] args = joinPoint.getArgs();
		// System.out.println("Before:"+args[0]);
	}

	//@After("pointCut()")
	public void after(JoinPoint joinPoint) {
		// Object[] args = joinPoint.getArgs();
		// System.out.println("after:"+args[0]);
	}

	//@AfterReturning(pointcut = "pointCut()")
	public void afterReturning(JoinPoint joinPoint) {
		// Object[] args = joinPoint.getArgs();
		// Gson gson =new Gson();
		// args[0]= gson.toJson(args[0]);
		// Map<String, Object> map =new HashMap<String, Object>();
		// if(success)
		// {
		// map.put("states", true);
		// }
		// else
		// {
		// map.put("states", false);
		// map.put("code", "0");
		// map.put("msg", "失败了");
		// }
		// map.put("value",returnVal );
		// System.out.println("afterReturn return:" + gson.toJson(returnVal));
		// //args[0]=map;
		// System.out.println("afterReturn param:"+args[0]);
		// System.out.println("afterReturn return:" + gson.toJson(map));
		// System.out.println("afterReturn return:" + gson.toJson(returnVal));
	}

	//@Around("pointCut()")
	public Object around(ProceedingJoinPoint pjp)  { 
		ModelMap map ; 
		try {
			//获取原始返回值 
			 map = (ModelMap) pjp.proceed();    
			 Signature signature= pjp.getSignature(); 
			 Class returnType = ((MethodSignature) signature).getReturnType(); 
			 String name=returnType.getName();
			 String[] type=name.split("\\."); 
			 if(name.contains("ModelMap"))
			 {
			 map.put("states", true);  
			 }
		} catch (Throwable ex) {
			map =new ModelMap();
			map.put("err", ex.getMessage()); 
		} 
		return  map;
	}

	//@AfterThrowing(pointcut = "pointCut()", throwing = "error")
	public void afterThrowing(JoinPoint jp, Throwable error) {
		// System.out.println("throw:" + error);
		// err="出错了";
		// success=false;
	}
}
package com.spring;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.ui.ModelMap;

import com.google.gson.annotations.Until;

@Service
public class User {
private String name;
private String sex;
private int age;
private List<Friend> friends;
User(){
	friends=new ArrayList<Friend>();
}
public String getName() {
	return name;
}
public void setName(String name) {
	name= "姓名:"+name;
	this.name =name;
}
public String getSex() {
	return sex;
}
public void setSex(String sex) {
	this.sex = sex;
}
public int getAge() {
	return age;
}
public void setAge(int age) throws Exception {
	if(age>120){
		throw new Exception("年龄超值");
	}
	this.age = age;
}

public List<Friend> getFriends() {
	return friends;
} 
public ModelMap  addDo(Friend friend) {
	this.friends.add(friend);
	ModelMap map=new ModelMap();
	map.addAttribute("value", friend);
	return map;
}
 

public ModelMap delDo(Friend friend) throws Exception {
	ModelMap map=new ModelMap();
	if(true){
		throw new Exception("錯誤的參數");
	} 
	return map;
}
@Override
public String toString() {
	return "User [name=" + name + ", sex=" + sex + ", age=" + age
			+ ", friends=" + friends + "]";
} 
}
package com.spring.test;
  
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext; 
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.google.gson.Gson;
import com.spring.Friend;
import com.spring.User;
@RunWith(SpringJUnit4ClassRunner.class)   
@ContextConfiguration(locations = { "classpath:applicationContext.xml" })  

public class userTest { 
	@Autowired 
	private ApplicationContext ac; 
	@Autowired
	private User user;
	@Autowired
	private Friend friend;
	@Autowired
	private Friend friend2;
	@Before
	public void setUp() throws Exception {
	}
 
	@Test
	public void testNew() throws Exception{
      
		
		friend.setName("李梅");
		friend.setAge(18);
		friend.setSex("女");
		Object obj=	  user.addDo(friend);   
		System.out.println("最终返回"+obj);
				friend2.setName("王淘");
				friend2.setAge(33);
				friend2.setSex("男");
				Object obj2=	  user.delDo(friend2);   
				System.out.println("最终返回"+obj2);
//	  user.setName("peter"); 
//	  user.setSex("男"); 
	  
	//  user.setAge(166);
	}

}


© 著作权归作者所有

LikesWinds
粉丝 1
博文 4
码字总数 1805
作品 0
西安
私信 提问
SpringBoot系列之AOP实现的两种方式

AOP常用的实现方式有两种,一种是采用声明的方式来实现(基于XML),一种是采用注解的方式来实现(基于AspectJ)。 首先复习下AOP中一些比较重要的概念: Joinpoint(连接点):程序执行时的...

文文1
03/11
0
0
Spring AOP就是这么简单啦

前言 只有光头才能变强 上一篇已经讲解了Spring IOC知识点一网打尽!,这篇主要是讲解Spring的AOP模块~ 之前我已经写过一篇关于AOP的文章了,那篇把比较重要的知识点都讲解过了一篇啦:Sprin...

Java3y
2018/05/24
0
0
Spring系列教程六:AOP详细讲解

AOP 概述 什么是 AOP AOP:全称是 Aspect Oriented Programming 即:面向切面编程。 AOP技术是对OOP技术的一种延伸,AOP是面向纵向,OOP是面向横向。简单的说它就是把我们程序重复的代码抽取...

我叫小糖主
05/19
0
0
《Spring5学习》04 - 面向切面编程

一、Spring面向切面编程的基本概念 面向切面编程(即AOP):把项目中需要再多处使用的功能比如日志、安全和事务等集中到一个类中处理,而不用在每个需要用到该功能的地方显式调用。 横切关注...

老韭菜
2018/08/19
0
0
一个常见的Spring IOC疑难症状

Case 请看下面的IOC实例: 1)AaaService实现AaaaInterface接口 2)在BaaService中Autowired AaaService Code Java代码 //1.AaaInterface package com.test; public interface AaaInterface......

stamen
2015/08/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

重磅!容器集群监控利器 阿里云Prometheus 正式免费公测

Prometheus 作为容器生态下集群监控的首选方案,是一套开源的系统监控报警框架。它启发于 Google 的 borgmon 监控系统,并于 2015 年正式发布。2016 年,Prometheus 正式加入 Cloud Native C...

zhaowei121
25分钟前
2
0
Windows线程优先级

参考原文:https://www.cnblogs.com/forlina/archive/2011/08/10/2133438.html

极客行
28分钟前
2
0
聊聊前后端分离接口规范

1. 前言 随着互联网的高速发展,前端页面的展示、交互体验越来越灵活、炫丽,响应体验也要求越来越高,后端服务的高并发、高可用、高性能、高扩展等特性的要求也愈加苛刻,从而导致前后端研发...

Java面经
31分钟前
2
0
go监控方案(7) -- 实现

metrics 客户端 数据采集使用go-metrics 传输使用UDP, 仿StatsD上传采集数据, InfluxDB进行数据存储, Grafana进行展示。 实现github 地址 https://github.com/solate/metrics 该地址有已经改...

solate
34分钟前
3
0
企业微信付款到零钱

企业微信付款到零钱,提示证书不存在,可能原因如下: 1. apiclient_cert.p12文件的绝对路径,或者如果放在项目中,请以classpath:开头指定

whatwhowhy
36分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部