第六章 Aop详解

        Aop:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术

 

proxyFactoryBean代理

package com.dao;

/*
 * 	接口
 */
public interface IDAO {
	public void query();
	public void add();
	public void del();
	public void upd();
}
package com.dao;

public class DAOImp implements IDAO {

	@Override
	public void query() {
		System.out.println("####正在查询中..........");
	}

	@Override
	public void add() {
		System.out.println("####正在增加中..........");
	}

	@Override
	public void del() {
		System.out.println("####正在删除中..........");
	}

	@Override
	public void upd() {
		System.out.println("####正在修改中..........");
	}

}
package com.interceptor;

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

/*
 * 	拦截器
 */
public class ServiceInterceptor implements MethodInterceptor{

	@Override
	public Object invoke(MethodInvocation methodInvocation) throws Throwable {
		System.out.println("开始操作.....");
		System.out.println("操作中.....");
		System.out.println("准备开始事件...........");
		//拦截到方法后让方法继续执行
		Object obj=methodInvocation.proceed();
		System.out.println("操作中.....");
		System.out.println("事件结束.....\n");
		return obj;
	}

}
<!-- 注入接口实现类 -->
	<bean id="daoImp" class="com.dao.DAOImp"></bean>
	
	<!-- 注入拦截器-->
	<bean id="serviceInterceptor" class="com.interceptor.ServiceInterceptor"></bean>
	
	<!-- proxyFactoryBean设定代理类 -->
	<bean id="proxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean">
		<!-- 指定特定代理的接口 -->
		<property name="proxyInterfaces">
			<value>com.dao.IDAO</value>
		</property>
		
		<!-- 程序的切入点,接口的具体实现类 -->
		<property name="target">
			<ref bean="daoImp"/>
		</property>
		
		<!-- 引入拦截器 -->
		<property name="interceptorNames">
			<value>serviceInterceptor</value>
		</property>
	</bean>
package com.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dao.IDAO;

/*
 * 	测试
 */
public class Test {
	public static void main(String[] args) {
		ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
		/*
		 * proxyFactoryBean代理
		 * 从代理工厂类中获取业务对象,
		 * 从代理工厂取出的对象必须是接口类型
		 */
		IDAO id = (IDAO) ac.getBean("proxyFactoryBean");
		id.add();
		id.del();
		id.upd();
		id.query();
	}
}

 

CGLIB代理

<!-- 注入接口实现类 -->
	<bean id="daoImp" class="com.dao.DAOImp"></bean>
	
	<!-- 注入拦截器-->
	<bean id="serviceInterceptor" class="com.interceptor.ServiceInterceptor"></bean>
	
	<!-- CGLIB代理 :设定代理类 -->
	<bean id="proxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean">
		<!-- 设定代理的类 -->
		<property name="proxyTargetClass">
			<value>true</value>
		</property>
		
		<!-- 程序的切入点,接口的具体实现类 -->
		<property name="target">
			<ref bean="daoImp"/>
		</property>
		
		<!-- 引入拦截器 -->
		<property name="interceptorNames">
			<value>serviceInterceptor</value>
		</property>
	</bean>
package com.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dao.DAOImp;

/*
 * 	测试
 */
public class Test {
	public static void main(String[] args) {
		ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
		/*
		 * CGLIB代理
		 * 从代理工厂类中获取业务对象,
		 * 从代理工厂取出的对象必须是实现类
		 */
		DAOImp id = (DAOImp) ac.getBean("proxyFactoryBean");
		id.add();
		id.del();
		id.upd();
		id.query();
	}
}

 

自动代理

<!-- 注入接口实现类 -->
	<bean id="daoImp" class="com.dao.DAOImp"></bean>
	
	<!-- 注入拦截器-->
	<bean id="serviceInterceptor" class="com.interceptor.ServiceInterceptor"></bean>
	
	<!-- 自动代理 :设定代理类 -->
	<bean id="beanNameAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator" p:optimize="true">
		<!-- 设定代理-->
		<property name="beanNames">
			<list>
				<value>*Imp</value><!-- 代理所有以Imp结尾的 -->
			</list>
		</property>
		
		<!-- 引入拦截器 -->
		<property name="interceptorNames">
			<value>serviceInterceptor</value>
		</property>
	</bean>
package com.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dao.DAOImp;

/*
 * 	测试
 */
public class Test {
	public static void main(String[] args) {
		ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
		/*
		 * 自动代理
		 * 可以直接从容器获取实现类
		 */
		DAOImp id = (DAOImp) ac.getBean("daoImp");
		id.add();
		id.del();
		id.upd();
		id.query();
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值