Spring.net AOP+IOC+log4配置信息(MVC4)

网上找了一天,终于简单的配置完了Spring.Net的AOP+IOC配置,记录一下

导入DLL


 

先来一张WEB.Config的完整配置

<?xml version="1.0"?>
<!--
  有关如何配置 ASP.NET 应用程序的详细信息,请访问
  http://go.microsoft.com/fwlink/?LinkId=301880
  -->
<configuration>

	<configSections>
		<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
		<!--LOG4-->
		<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
		<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
		<!--Spring.NET配置节信息-->
		<sectionGroup name="spring">
			<!--Spring.Net配置-->
			<section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc4"/>
		</sectionGroup>
		<!--Spring.NET配置节信息END-->
	</configSections>
	<!--Spring配置信息-->
	<spring>
		<!--Spring.Net配置-->
		<context>
			<resource uri="file://~/Config/controllers.xml"/>
			<resource uri="file://~/Config/services.xml"/>
			<resource uri="file://~/Config/aopdal.xml"/>
		</context>
	</spring>
	<!--Spring配置信息End-->
	
	<log4net>
		<root>
			<level value="WARN" />
			<appender-ref ref="LogFileAppender" />
			<appender-ref ref="ConsoleAppender" />
		</root>

		<logger name="testApp.Logging">
			<level value="DEBUG"/>
		</logger>

		<appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
			<param name="File" value="log-file.txt" />
			<param name="AppendToFile" value="true" />

			<layout type="log4net.Layout.PatternLayout">
				<param name="Header" value="[Header] "/>
				<param name="Footer" value="[Footer] "/>
				<param name="ConversionPattern" value="%d [%t] %-5p %c [%x]  - %m%n" />
			</layout>

			<filter type="log4net.Filter.LevelRangeFilter">
				<param name="LevelMin" value="DEBUG" />
				<param name="LevelMax" value="WARN" />
			</filter>
		</appender>

		<appender name="ConsoleAppender"  type="log4net.Appender.ConsoleAppender" >
			<layout type="log4net.Layout.PatternLayout">
				<param name="ConversionPattern"  value="%d [%t] %-5p %c [%x] - %m%n" />
			</layout>
		</appender>

	</log4net>
	
	<appSettings>
		<add key="webpages:Version" value="3.0.0.0"/>
		<add key="webpages:Enabled" value="false"/>
		<add key="ClientValidationEnabled" value="true"/>
		<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
	</appSettings>

	<system.web>
		<compilation debug="true" targetFramework="4.5"/>
		<httpRuntime/>
		<pages controlRenderingCompatibilityVersion="4.0"/>
	</system.web>
</configuration>


1.IOC 

配置文件

WEB.CONFIG


<configuration>
        <--configSections需要紧跟configuration-->
	<configSections>

		<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
		<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
		<!--Spring.NET配置节信息-->
		<sectionGroup name="spring">
			<!--Spring.Net配置-->
			<section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc4"/>
		</sectionGroup>
		<!--Spring.NET配置节信息END-->
	</configSections>
	<!--Spring配置信息-->
	<spring>
		<!--Spring.Net配置-->
		<context>
			<resource uri="file://~/Config/controllers.xml"/>
			<resource uri="file://~/Config/services.xml"/>
			<resource uri="file://~/Config/aopdal.xml"/>
		</context>
	</spring>
	<!--Spring配置信息End-->
	
<--以下无关配置-->
	<appSettings>
		<add key="webpages:Version" value="3.0.0.0"/>
		<add key="webpages:Enabled" value="false"/>
		<add key="ClientValidationEnabled" value="true"/>
		<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
		<add key="ModelMappingAssembly" value="Project.Model"/>
		<add key="OracleClient" value="Project.Model"/>
		<add key="SqlConnection" value=""/>
	</appSettings>

	<system.web>
		<compilation debug="true" targetFramework="4.5"/>
		<httpRuntime/>
		<pages controlRenderingCompatibilityVersion="4.0"/>
	</system.web>
</configuration>

 

另外独立出去的配置文档(services.xml,其他xml同样方式配置在外面)

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
	<object name="DAL_User" type="FirstWebDemo.DAL.DAL_User,FirstWebDemo" singleton="false">
		<!--<property name="modelName" value="User">  </property>-->
		<!--//属性注入-->
		<constructor-arg index="0" value="User"/>
	</object>
</objects>

代码段 bll 手动注入,后面再研究自动注入

    public class BLL_User : IBLL_User
    {
        private DAL.IDAL_User IDAL_User; //=new DAL.DAL_User("User");

        public BLL_User(DAL_User user)
        {
            this.IDAL_User = user;
        }

        public User GetUser(User user)
        {
            IApplicationContext ctx = ContextRegistry.GetContext();
            IDAL_User = (IDAL_User)ctx.GetObject("DAL_User");
            return IDAL_User.GetUser().FirstOrDefault();
        }

DAI

    public class DAL_User:BaseProject.DataProvide.DataAccess<User>,IDAL_User
    {
        //public DAL_User()
        //{

        //}
        public DAL_User(string modelName):base (modelName)
        {
        }
        internal Project.Models.Models.User GetUser(Project.Models.Models.User user)
        {
          List<User> listUser =  base.GetList();

          return (User)listUser.Where(x => x.UserID == user.UserID).FirstOrDefault();
        }

        public List<User> GetUser()
        {
            log4net.ILog log = log4net.LogManager.GetLogger("testApp.Logging");
            log.Info(string.Format("GetUser。。。。"));
           return  base.GetList();
        }
    }

controller:新建的Factory构造Controller,controller一直实例化不了,好像是只支持0参数的构造器,需要在研究?

    public class LoginController : Controller
    {
        //
        // GET: /Home/
        private IBLL_User bll_User;
        public LoginController()
        {

        }
        public LoginController(BLL_User bll_User)
        {
            this.bll_User = bll_User;
        }
    public class MyControllerFactory : DefaultControllerFactory
    {

        protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
        {
            IApplicationContext context = ContextRegistry.GetContext();
            IDictionary<string, object> k = context.GetObjectsOfType(controllerType);
            return (IController)context.GetObjectsOfType(controllerType).First().Value;
            //return base.GetControllerInstance(requestContext, controllerType);
        }
    }
}

2.log4简单配置

<log4net>
		<root>
			<level value="WARN" />
			<appender-ref ref="LogFileAppender" />
			<appender-ref ref="ConsoleAppender" />
		</root>

		<logger name="testApp.Logging">
			<level value="DEBUG"/>
		</logger>

		<appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
			<param name="File" value="log-file.txt" />
			<param name="AppendToFile" value="true" />

			<layout type="log4net.Layout.PatternLayout">
				<param name="Header" value="[Header] "/>
				<param name="Footer" value="[Footer] "/>
				<param name="ConversionPattern" value="%d [%t] %-5p %c [%x]  - %m%n" />
			</layout>

			<filter type="log4net.Filter.LevelRangeFilter">
				<param name="LevelMin" value="DEBUG" />
				<param name="LevelMax" value="WARN" />
			</filter>
		</appender>

		<appender name="ConsoleAppender"  type="log4net.Appender.ConsoleAppender" >
			<layout type="log4net.Layout.PatternLayout">
				<param name="ConversionPattern"  value="%d [%t] %-5p %c [%x] - %m%n" />
			</layout>
		</appender>

	</log4net>

使用:默认生成为项目路径下log-file.txt文件

 log4net.ILog log = log4net.LogManager.GetLogger("testApp.Logging");
            log.Info(string.Format("启动了前置AOP。。。。。方法{0}....target:target..." + DateTime.Now.ToString(), method.Name));

 

 3.aop:WEBCONFIG 配置信息和IOC一样,新增一个XML配置

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net" xmlns:aop="http://www.springframework.net/aop">
	<description>配置实现AOP</description>
	<!--不用修改,必须要写的,不让不能拦截,对象名切入点:ObjectNameAutoProoxyCreateor-->
	<object name="ProxyCreator" type="Spring.Aop.Framework.AutoProxy.ObjectNameAutoProxyCreator, Spring.Aop">
		<property name="ObjectNames">
			<list>
				<value>DAL*</value>
				<!--注意在这里通配的是你CS文件的名字,而不是你的方法名。要修改-->
			</list>
		</property>
		<property name="InterceptorNames">
			<list>
				<value>AroundAdvisor</value>
				<!--修改为你在XML定义的PointcutAdvisor-->
			</list>
		</property>
	</object>


	<object name="AroundAdvice" type="FirstWebDemo.AOP.AOP_DAL_User, FirstWebDemo"/>
	<!--修改为要切入类-->

	<!--不修改-->
	<object name="AroundAdvisor" type="Spring.Aop.Support.NameMatchMethodPointcutAdvisor, Spring.Aop">

		<property name="Advice" ref="AroundAdvice"/><!--刚刚定义的要切入的类-->

		<property name="MappedNames"><!--要拦截的方法-->
			<list>
				<value>Get*</value>

				<value>Del*</value>

			</list>

		</property>

	</object>

</objects>

 

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Spring.Aop;

namespace FirstWebDemo.AOP
{
    public class AOP_DAL_User : IMethodBeforeAdvice
    {

        public void Before(System.Reflection.MethodInfo method, object[] args, object target)
        {
            
            log4net.ILog log = log4net.LogManager.GetLogger("testApp.Logging");
            log.Info(string.Format("启动了前置AOP。。。。。方法{0}....target:target..." + DateTime.Now.ToString(), method.Name));
            Console.WriteLine("结束:  " + method.Name + "." + method.Name);

        }
    }
}

成功,今天就这样,剩下的后面研究

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值