面向切面编程

1、AOP:

面向切面编程:Aspect Oriented Programming

2、AOP在Spring中的作用

提供声明式服务

允许用户实现自定义切面

   AOP:在不改变原有代码情况下添加新的功能(通过代理来实现)


3、AOP的好处


4、名词解释

关注点:增加的某个业务,如安全,缓存,业务等
切 面:一个关注点的模块化
通 知:在切面某个特定的连接点执行的动作
织 入:把切面连接到其他的应用程序类型或者对象上,并创建一个被通知的对象

5、使用Spring实现AOP

定义接口:UserService.java
package spring.aop.achieve;

public interface UserService {
	public void add();
	public void delete();
	public void search();
	public void update();

}
UserService.java
package spring.aop.achieve;

public class UserServiceImpl implements UserService {

	@Override
	public void add() {
		// TODO Auto-generated method stub
		System.out.println("add()");
		
	}

	@Override
	public void delete() {
		// TODO Auto-generated method stub
		System.out.println("delete()");
		
	}

	@Override
	public void search() {
		// TODO Auto-generated method stub
		System.out.println("search()");
		
	}

	@Override
	public void update() {
		// TODO Auto-generated method stub
		System.out.println("update()");
		
	}

}
Log.java
package spring.aop.achieve;

import java.lang.reflect.Method;

import org.springframework.aop.MethodBeforeAdvice;

public class Log implements MethodBeforeAdvice {

	@Override
	// before()即前置通知
	// method:切入点的方法对象,args:被调用的方法的参数,target:目标对象
	public void before(Method method, Object[] args, Object target)
			throws Throwable {
		// TODO Auto-generated method stub
		System.out.println(target.getClass().getName() + "的" + method.getName()
				+ "方法被执行");

	}

}
TestAop.java
package spring.aop.achieve;

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

public class TestAop {
	public static void main(String[] args) {
		ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
		UserService us = (UserService)ac.getBean("userService");
		us.add();

	}

}
beans.xml
注意dtd文件导入:
xmlns:aop="http://www.springframework.org/schema/aop"
 http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
	<bean id="userService" class="spring.aop.achieve.UserServiceImpl"/>
	<bean id='log' class='spring.aop.achieve.Log'/>
	<aop:config>
		<!-- execute()是一个表达式,*spring.aop.achieve.UserService.*代表所有方法返回值 -->
		<aop:pointcut expression="execution(* spring.aop.achieve.UserService.*)" id="pointcut"/>
		<aop:advisor advice-ref="log" pointcut-ref="pointcut"/>
	</aop:config>






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值