spring入门实例-aop

本文通过具体示例展示了如何在Spring框架中利用AOP(面向切面编程)进行日志记录和数据库操作拦截。通过配置文件定义了拦截器、目标对象及代理,实现了对特定方法调用前后的行为增强。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

spring入门实例-aop 

使用interceptor模式实现advice

实例:

配置databaseaop.xml

 

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

	<description>database aop</description>

	<bean id="logInterceptor" class="com.myspring.aop.LogInterceptor"></bean>
	<bean id="DataBaseSpeaker" class="com.myspring.aop.DataBaseSpeaker"></bean>
	<bean id="OracleInterceptor" class="com.myspring.aop.OracleInterceptor"></bean>
	<bean id="dbproxy" class="org.springframework.aop.framework.ProxyFactoryBean">
		<property name="proxyInterfaces">
			<value>com.myspring.aop.IHello</value>
		</property>
		<property name="target">
			<ref bean="DataBaseSpeaker" />
		</property>
		<property name="interceptorNames">
			<list>
				<value>logInterceptor</value>
				<value>OracleInterceptor</value>
			</list>
		</property>
	</bean>

</beans>

 

 

interactor的监控接口:

 

public interface IHello
{
	public String hello(String name);
	public void morning(String name);
}

 

 接口的实现类:

 

public class DataBaseSpeaker implements IHello
{

	@Override
	public String hello(String name)
	{
		System.out.println("mysql,"+name);
		return name;
	}

	@Override
	public void morning(String name)
	{
		System.out.println("oracle,"+name);
	}
	
	public static void main(String[] args)
	{
		ApplicationContext context = new ClassPathXmlApplicationContext("com/myspring/aop/databaseaop.xml");
		IHello helloProxy = (IHello) context.getBean("dbproxy");
		helloProxy.hello("227");
		helloProxy.morning("momor");
	}
}

 

 

两个interceptor

 

public class LogInterceptor implements MethodInterceptor
{
	private Logger logger = Logger.getLogger(this.getClass().getName());
	@Override
	public Object invoke(MethodInvocation methodInvocation) throws Throwable
	{
		logger.log(Level.INFO, "method stats...");
		System.out.println("ffffffffffffffffff");
		try{
			Object result = methodInvocation.proceed();
			System.out.println(result);
			return result;
		}finally{
			logger.log(Level.INFO, "method ends.."+methodInvocation.getMethod());
			System.out.println("eeeeeeeeeeeeeeeeeee");
		}
	}

}

 public class OracleInterceptor implements MethodInterceptor

{

	@Override
	public Object invoke(MethodInvocation methodInvocation) throws Throwable
	{
		// TODO Auto-generated method stub
		System.out.println("qqqqqqqqqqqqMethodInvocation");
		Object obj = methodInvocation.proceed();
		System.out.println("qqqqqqqqqqqqMethodInvocation");
		return obj;
	}

}
 

public class OracleInterceptor implements MethodInterceptor
{

	@Override
	public Object invoke(MethodInvocation methodInvocation) throws Throwable
	{
		// TODO Auto-generated method stub
		System.out.println("qqqqqqqqqqqqMethodInvocation");
		Object obj = methodInvocation.proceed();
		System.out.println("qqqqqqqqqqqqMethodInvocation");
		return obj;
	}

}
 

测试main:

public static void main(String[] args)
	{
		ApplicationContext context = new ClassPathXmlApplicationContext("com/myspring/aop/databaseaop.xml");
		IHello helloProxy = (IHello) context.getBean("dbproxy");
		helloProxy.hello("227");
		helloProxy.morning("momor");
	}
 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值