spring学习笔记(十)

spring对AOP的支持

spring采用对AOP的支持(采用Annotation @...,或者采用配置文件的方式)
导入包aspectjrt.jar  aspectjweaver.jar 是实现aop最全的两个包 采用静态编译

而非运行时编译,效率上会高些

横切关注点模块化就是切面

切面默认情况下不需要接口,但对于目标对象,必须要有接口.

 

结构

 

package zhc.love.dj.test;

public interface UserManger {
	
	public void addUser(String name,String password);
	public void delUser(int id) ;
	public void modUser(int id,String name,String password);
}

 

 

  

package zhc.love.dj.test;

public class UserMangerImp implements UserManger {

	public void addUser(String name, String password) {
		System.out.println("==============UserMangerImp.addUser()===================");
	}

	public void delUser(int id) {
		System.out.println("==============UserMangerImp.delUser()===================");
	}

	public void modUser(int id, String name, String password) {
		System.out.println("==============UserMangerImp.modUser()===================");
	}
}

 

  

package zhc.love.dj.test;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class Client {

	public static void main(String[] args) {
		//用spring的类来加载配置文件
		BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
		//通过工厂产生类 调用对应类的id
		UserManger mangaer = (UserManger)factory.getBean("UserManger");
		//mangaer.addUser("zhang", "jingjing");
          mangaer.delUser(1);
	}

}

 

 

  

package zhc.love.dj.test;

public interface MySecurtyManger {
	
	public void checkSecurity();
}

 

package zhc.love.dj.test;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

//定义切面,横切关注点.采用Annotation方式
@Aspect
public class MySecurtyMangerImp implements MySecurtyManger {

	//标识方法,不会被类用,定义切入点名称.没有返回值
	//该方法只是一个标记.标识切入点的内容是一个表达式.来描述切入哪些对象,哪些方法
	//定义表达式,切入无论是否有返回值,add的任何方法,有没有参数都会执行切入,execution中第一个* 是返回值的意思
                    //add* 以add开头的方法
                    //add*(..) 以add开头的有没有参数的的方法.
	
	@Pointcut("execution(* add*(..))||execution(* del*(..))")
	private void allAddMethod(){}
	
	//定义advice ,定义这个advice织入到哪,在哪些切入点的何处织入.比如在切入点的前面,后面等.
	//将checkSecurity()方法织入到所有allAddMethod()方法前头
	
	@Before("allAddMethod()")
	public void checkSecurity() {
		System.out.println("=========checkSecurity()=========");
	}
	//需要在配置文件中支持Annotation方式
}

 

  

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xmlns:aop="http://www.springframework.org/schema/aop"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<!-- 配置文件中支持Annotation方式 -->
<aop:aspectj-autoproxy />
<!-- srping方式,所以得先配置 -->
<bean id="MySecurtyMangerImp" class="zhc.love.dj.test.MySecurtyMangerImp"></bean>
<bean id="UserManger" class="zhc.love.dj.test.UserMangerImp"></bean>
</beans>

 

你可能感兴趣的:(spring,AOP,bean,xml)