JavaEE——Spring学习笔记03【AOP开发】

——学习笔记01【Ioc开发的模式】
——学习笔记02【和的整合】
——学习笔记03【AOP开发】
——学习笔记04【的事务管理】
——学习笔记05【的逆行工程】
——学习笔记06【Maven创建Web工程】
目录
六、的AOP开发
1. AOP的概念
2. 动态代理(了解)
2.1 JDK动态代理
2.2 Cglib动态代理
3. AOP的编程的好处
4. AOP的编程相关术语
?5. AOP的开发模式
5.1 Aop的Xml开发方式
5.2 Aop的注解开发方式
六、的AOP开发 1. AOP的概念
AOP的英文全程为,叫做面向切面编程,主要是在运行期间动态实现在不修改源码的情况下给程序及进行功能增强 。针对目标功能进行扩展或是增强,通俗来说就是不修改源码,让目标获得它本身没有用的新功能 。其实就是OOP编程的一个补充,降低了代码的耦合性 。
AOP开发的底层是通过动态代理来完成,动态代理分为JDK动态代理和Cglib动态代理 。
JDK动态代理:依赖于一个接口
Cglib动态代理:依赖一个类
2. 动态代理(了解)2.1 JDK动态代理
只能对实现了接口的类产生代理 。
实现的步骤:
1)业务的接口和实现类
/** 用户的接口* */public interface UserDao {public void save();public void update();public void find();public void delete();}
/** 用户接口实现类* */public class UserDaoImpl implements UserDao {@Overridepublic void save() {System.out.println("保存用户信息");}@Overridepublic void update() {System.out.println("更改用户信息");}@Overridepublic void find() {System.out.println("查询用户信息");}@Overridepublic void delete() {System.out.println("删除用户信息");}}
2)JDK动态代理的类
/** JDK动态代理的类:实现Invocation Handler* */public class JdkProxy implements InvocationHandler {//将被增强的对象传递进来(目标类)private UserDao userDao;public JdkProxy(UserDao userDao) {this.userDao = userDao;}//产生UserDao代理的方法public UserDao createProxy() {/** 第一个参数:UserDao类的加载器* 第二个参数:要实现的接口* */UserDao userDaoProxy = (UserDao) Proxy.newProxyInstance(userDao.getClass().getClassLoader(),userDao.getClass().getInterfaces(), this);return userDaoProxy;}/* 方法功能增强* 第一个参数: 代理对象* 第二个参数: 真正执行的方法* 第三个参数: 是方法的参数**/@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {if ("save".equals(method.getName())) {//增强System.out.println("权限校验==========");return method.invoke(userDao, args);}return method.invoke(userDao, args);}}
3)测试方法
/** 用户方法增强的测试类* */public class UserDaoTest {public static void main(String[] args) {//创建一个UserDao的实现类对象UserDao userDao = new UserDaoImpl();//创建代理的对象UserDao proxy = new JdkProxy(userDao).createProxy();proxy.save();proxy.update();proxy.find();proxy.delete();}}
2.2 Cglib动态代理
1)针对类而言:引入第三代理的jar包
cglibcglib2.1_3
2)目标类
/** 客户信息的类* */public class CustomerService {public void save() {System.out.println("保存用户信息");}public void update() {System.out.println("更改用户信息");}public void find() {System.out.println("查询用户信息");}public void delete() {System.out.println("删除用户信息");}}
3)Cglib代理的类