接下来我们看一下SpringNetAop层的内容;此层主要是实现一些AOP的代码,以及特性和一个统一调用spring.net的类;记录日志我们使用Log4Net来实现;

1:Aspects 文件夹里存放的几个类分别是Spring.net几种AOP的通知模式;因为本实例主要是要演示异常的调用所以我们调用的是类LoggingThrowsAdvice.cs;有关Log4Net的运用大家可以搜索一下,不是本文的重点;这边有个要注意此处是类库运用Log4net,所以在读取配置文件时要写成@"bin\\Log4Net.config";而配置文件Log4Net.config属性要设置为:始终复制  嵌入的资源;

1:Aspects 文件夹里存放的几个类分别是Spring.net几种AOP的通知模式;因为本实例主要是要演示异常的调用所以我们调用的是类LoggingThrowsAdvice.cs;有关Log4Net的运用大家可以搜索一下,不是本文的重点;这边有个要注意此处是类库运用Log4net,所以在读取配置文件时要写成@"bin\\Log4Net.config";而配置文件Log4Net.config属性要设置为:始终复制  嵌入的资源;

using System.Linq;
using System.Text;
using SpringNetCommon;
using System.Reflection;
using Spring.Aop;
using log4net;
using log4net.Core; [assembly: log4net.Config.XmlConfigurator(ConfigFile = @"bin\\Log4Net.config", Watch = true)]
namespace SpringNetAop.Aspects
{
public class LoggingThrowsAdvice:IThrowsAdvice
{
private ILog logger;
public LoggingThrowsAdvice()
{
logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("Log4Net.config"));
} public void AfterThrowing(Exception ex)
{
logger.Warn(
String.Format("异常的内容为: {0}", ex));
}
}
}

Log4Net.config配置的内容如下:配置实现的功能是每天生成一个记录文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler" />
</configSections>
<log4net>
<appender name="RollingLogRootFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日志的路径-->
<file value=".\Log\WanLog" />
<!--是否覆盖,默认是追加true-->
<appendToFile value="true"/>
<!--文件滚动周期(每日创建新日志文件)-->
<datePattern value="yyyyMMdd&quot;.txt&quot;"/>
<!--设置无限备份=-1 ,最大备份数为1000-->
<maxSizeRollBackups value="1000"/>
<!--名称是否可以更改为false为可以更改-->
<staticLogFileName value="false" />
<!--文件滚动选项Composite表示根据日期和大小来滚动-->
<rollingStyle value="Composite" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss}[%t][%-5p][%c]%m%n%exception%n" />
</layout>
</appender>
<root>
<level value="All" />
<appender-ref ref="RollingLogRootFileAppender" />
</root>
</log4net>
</configuration>

2:Attributes存放的是一个重写的特性;spring.net特性来定位要调用AOP;这边主要注意是要继承Attribute;

using System.Collections.Generic;
using System.Linq;
using System.Text; namespace SpringNetAop.Attributes
{
public class LoggingAttributes:Attribute
{
public LoggingAttributes()
{ }
}
}

3:SpringNetHelp文件夹存放的是一个统一调用spring.net的类;因为我把spring.net的配置文件存放在UI层;所以要注意调用的路径问题;配置文件我们在UI层进行;

using Spring.Core;
using Spring.Context;
using Spring.Context.Support;
using Spring.Core.IO;
using Spring.Objects.Factory;
using Spring.Objects.Factory.Xml;
namespace SpringNetAop.SpringNetHelp
{
public class GetAppContext
{
private static IApplicationContext applicationContext = null; public GetAppContext()
{ } public static IApplicationContext ApplicationContext
{
get
{
applicationContext = new XmlApplicationContext("~/Config/Objects.xml");
return applicationContext;
}
}
}
}

接下来我们看一下逻辑层跟数据层的代码;

首先看一下数据层的代码;我们为要进行异常记录的方法加上特性[LoggingAttributes]

using System.Linq;
using System.Text;
using ISpringNetDAL;
using SpringNetAop.Attributes;
namespace SpringNetDAL
{
public class UserOperateDAL:IUserOperateDAL
{
[LoggingAttributes]
public string UserLogin(string UserName)
{
throw new Exception("我是DAL层的异常");
}
}
}

看BLL层的具体代码如下:

using Spring.Core;
using SpringNetAop;
using Spring.Core.IO;
using Spring.Objects.Factory.Xml;
using Spring.Objects.Factory;
using Spring.Context.Support;
using Spring.Context;
namespace SpringNetBLL
{
public class UserOperate:BaseBLL
{
private IUserOperateDAL _userOperatedal = null; public UserOperate()
{
} [LoggingAttributes]
public override string UserLogin(string UserName)
{
// throw new Exception("我是BLL层异常内容啊");
_userOperatedal = (IUserOperateDAL)SpringNetAop.SpringNetHelp.GetAppContext.ApplicationContext.GetObject("UserOperateDal");
return _userOperatedal.UserLogin(UserName);
}
}
}
<?xml version="1.0"?>
<configuration> <configSections>
<sectionGroup name="spring">
<!--提供Spring对应用程序上下文的支持-->
<section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
<!--提供Spring对 对象容器的支持-->
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core"/>
</sectionGroup>
</configSections> <spring>
<context>
<resource uri="file://~/Config/Objects.xml"/>
<!--<resource uri="assembly://SpringNetUI/SpringNetUI.Config/Objects.xml"/>-->
</context>
</spring> </configuration>
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <object name="UserOperateDal" type="SpringNetDAL.UserOperateDAL,SpringNetDAL"/> <!--环绕通知拦截 运用特性-->
<object id="aroundAdvisor" type="Spring.Aop.Support.AttributeMatchMethodPointcutAdvisor, Spring.Aop">
<property name="Advice">
<object type="SpringNetAop.Aspects.LoggingAroundAdvice, SpringNetAop" />
</property>
<property name="Attribute"
value="SpringNetAop.Attributes.LoggingAttributes, SpringNetAop" />
</object> <!--后置通知拦截 运用名称-->
<object id="afterAdvisor" type="Spring.Aop.Support.NameMatchMethodPointcutAdvisor, Spring.Aop">
<property name="Advice">
<object type="SpringNetAop.Aspects.LoggingAfterAdvice, SpringNetAop" />
</property>
<property name="MappedNames">
<list>
<value>*UserLogin</value>
</list>
</property>
</object> <!--异常通知拦截 程序所有都支持 不设置条件-->
<object id="throwsAdvice" type="SpringNetAop.Aspects.LoggingThrowsAdvice, SpringNetAop" /> <object id="myServiceCommand" type="Spring.Aop.Framework.ProxyFactoryObject">
<property name="Target">
<object type="SpringNetBLL.UserOperate, SpringNetBLL" />
</property>
<property name="InterceptorNames">
<list>
<value>aroundAdvisor</value>
<value>afterAdvisor</value>
<value>throwsAdvice</value>
</list>
</property>
</object>
</objects>

spring.net异常处理的更多相关文章

  1. Spring Boot异常处理详解

    在Spring MVC异常处理详解中,介绍了Spring MVC的异常处理体系,本文将讲解在此基础上Spring Boot为我们做了哪些工作.下图列出了Spring Boot中跟MVC异常处理相关的类 ...

  2. Spring Boot 异常处理

    Spring Boot 异常处理 本节介绍一下 Spring Boot 启动时是如何处理异常的?核心类是 SpringBootExceptionReporter 和 SpringBootExcepti ...

  3. Spring Boot异常处理

    一.默认映射 我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局 ...

  4. Spring全局异常处理的三种方式

    在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合度高,工作 ...

  5. Spring 全局异常处理

    [参考文章]:Spring全局异常处理的三种方式 [参考文章]:Spring Boot 系列(八)@ControllerAdvice 拦截异常并统一处理 [参考文章]:@ControllerAdvic ...

  6. Spring MVC异常处理SimpleMappingExceptionResolver

    Spring MVC异常处理SimpleMappingExceptionResolver[转] (2012-12-07 13:45:33) 转载▼ 标签: 杂谈 分类: 技术分享 Spring3.0中 ...

  7. Spring统一异常处理

    1.为什么要用Spring的统一异常处理? 项目中无论是controller层.service层还是dao层都会有异常发生.每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量 ...

  8. Spring MVC异常处理代码完整实例

    Spring MVC异常处理流程: 提供构造方法传值: 配置异常处理器的bean

  9. 一文带你掌握Spring Web异常处理方式

    一.前言 大家好,我是 去哪里吃鱼 ,也叫小张. 最近从单位离职了,离开了五年多来朝朝夕夕皆灯火辉煌的某网,激情也好悲凉也罢,觥筹场上屡屡物是人非,调转过事业部以为能换种情绪,岂料和下了周五的班的前同 ...

  10. Spring 4 异常处理

    异常与HTTP状态码的映射(@ResponseStatus) Spring默认会将自身抛出的异常自动映射到合适的状态码,如下是一些示例: 举个例子,当后端抛出如下异常(TypeMismatchExce ...

随机推荐

  1. 【CentOs】开机启动与防火墙

    说明: 开机启动使用的命令式chkconfig .防火墙相关的命令式iptables 1.chkconfig 2.iptables 1.chkconfig 参数: --add   新增所指定的系统服务 ...

  2. ubuntu10.04编译内核不显示grub菜单解决

    问题描述:        ubuntu10.04 内核版本2.6.32.28编译内核之后版本2.6.37.6,系统在编译完内核之后,不显示grub菜单 参考资料:            http:// ...

  3. hdu 3487 Play with Chain

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3487 YaoYao is fond of playing his chains. He has a c ...

  4. c++取小数整数部分

    #include<math.h> double ceil(double x) //向上取整 double floor(double x) //向下取整 向上取整,取比x大的第一个整数值向下 ...

  5. 更改DEVExpress的Column的DisplayFormat为自定义的方法。

    更改DEVExpress的Column的DisplayFormat为自定义的方法. public partial class Form1 : XtraForm { public Form1() { I ...

  6. 百度之星A

    Scenic Popularity Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  7. ASP.NET 将Excel导入数据库

    将Excel导入数据库大致流程:  Excel数据->DataSet->数据库 需要做的准备:1.FileUpload控件一个,按钮一个,如果需要即时显示那么GridView或DataGr ...

  8. delphi一些小技巧 从别处看到

    开发环境--------    Delphi 7是一个很经典的版本,在Win2000/XP下推荐安装Delphi 7来开发软件,在Vista下推荐使用Delphi 2007开发软件.安装好Delphi ...

  9. HDU 1978 How many ways(动态规划)

    How many ways http://acm.hdu.edu.cn/showproblem.php?pid=1978 Problem Description 这是一个简单的生存游戏,你控制一个机器 ...

  10. Javascript offsetLeft详情

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...