String AOP——基于代理类的AOP的实现

AOP的全称是Aspect-Oriented Programming.即面向切面编程,也称为面向方面编程,它是面向对象编程(OOP)的一种补充。

1.string的通知类型

>>org.aopalliance.intercept.MethodInterceptor(环绕通知):在目标方法执行前后实施增强,可以应用于日志、事务管理等功能。

>>org.springframework.aop.MethodBeforeAdvice(前置通知):在目标方法执行前实施增强,可以应用于权限管理等功能

>>org.springframework.aop.AfterReturningAdvice(后置通知):在目标方法执行后实施增强,可以应用于关闭流、上传文件、删除临时文件等功能。

>>org.springframework.aop.ThrowsAdvice (异常通知):在方法抛出后实施增强,可以应用于处理异常记录日志等功能

>>org.springframework.aop.IntroductionInterceptor(引介通知):在目标类添加一些新的方法和属性,可以应用修改老版本程序(增强类)。

2.ProxyFactoryBean

    ProxyFactoryBean是FactoryBean接口的实现类,FactoryBean负责实例化一个Bean,而ProxyFactoryBean负责为其它Bean创建代理实例。

ProxyFactoryBean类中常用的配置属性如下:

target:代理的目标对象

proxyinterfaces:代理要实现的接口,如果有多个接口,可以使用赋值

proxyTargetClass:是否对类代理而不是接口,设置true时,使用的是cglib代理。

interceptorNames:需要织入目标的Advice

singleton:返回代理是否为但实例,默认为true ,即默认为返回单实例

optimize:当设置为true时。强制使用GGLIB。

3.练习(环绕通知)

(1)jar包,出了需要的核心jar包,还需要spring-aop-4.3.6.RELEASE.jar和aopalliance-1.0.jar。

(2)在src下创建一个包com.items.proxyfactorybean。并创建接口,接口实现类,切面类: 

接口:

package com.items.proxyfactorybean;

public interface UserDao {

public void hello();

public void hello2();

}

实现类:

package com.items.proxyfactorybean;

public class UserDaoIml implements UserDao{

@Override

public void hello() {

System.out.println("hello factoryBean");

}

@Override

public void hello2() {

System.out.println("hello factoryBean two");

}

}

切面类:

package com.items.proxyfactorybean;

import org.aopalliance.intercept.MethodInterceptor;

import org.aopalliance.intercept.MethodInvocation;

public class MyAspect implements MethodInterceptor{

@Override

public Object invoke(MethodInvocation mi) throws Throwable {

//执行目标方法

check();

Object obj = mi.proceed();

log();

return obj;

}

public void check(){

System.out.println("**模拟检查权限");

}

public void log() {

System.out.println("***模拟检查日志");

}

}

(2)创建aplicationContext.xml文件,并指定代理对象。

xmlns:p="http://www.springframework.org/schema/p"

    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.xsd">

(4)创建测试类ProxyFactoryTexst

package com.items.proxyfactorybean;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ProxyFactoryTexst {

public static void main(String [] args){

String xmlPath = "com/items/proxyfactorybean/aplicationContext.xml" ;

ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);

UserDao userDao = (UserDao) applicationContext.getBean("userDaoProxy");

userDao.hello();

userDao.hello2();

}

}



                                                                             学习书籍:《javaEE企业级开发程序》

你可能感兴趣的:(String AOP——基于代理类的AOP的实现)