AOP
- AOP:面向切面(方面)编程
- 比如说核心代码在不可更改的情况下,如何让核心代码的功能变强?
- 使用AOP编程,AOP思想的核心就是代理,核心代码就是一个普通人,如何才能让普通人变的万人敌,这个人的本质改变不了,只能穿额外的装备。额外的装备就是“切面”
- 没有AOP的业务代码,使用分层思想创建一个添加用户的功能:
- service业务服务层
- 作用:业务增强
- 数据加密、事务控制、中文转码、数据解析
- 业务接口和实现类
- UserService接口和UserServiceImpl实现类
- 作用:业务增强
- dao数据操作层
- 作用:和数据库打交道
- dao接口和实现类
- UserDao接口和UserDaoImpl实现类
- models模型层
- 实体类(和数据表对应的java类)
- User类
- service业务服务层
讯享网
User.java
public class User implements Serializable { private int id; private String name; // 构造和getset省略 }
讯享网
UserDao.java
讯享网public interface UserDao { void add( User user ); }
UserDaoImpl.java
public class UserServiceImpl implements UserService { // 依赖dao,要生成get和set private UserDao userDao; public UserDao getUserDao() { return userDao; } public void setUserDao(UserDao userDao) { this.userDao = userDao; } @Override public void add(User user) { System.out.println("业务层,数据使用MD5和SHA1加密!"); userDao.add(user); } }
UserService.java
讯享网public interface UserService { void add(User user); }
UserServiceImpl.java
public class UserServiceImpl implements UserService { @Override public void add(User user) { System.out.println("业务层,数据使用MD5和SHA1加密!"); UserDao ud = new UserDaoImpl(); ud.add(user); } }
Test.java
讯享网public class Test { public static void main(String[] args) { UserService us = new UserServiceImpl(); User u = new User(1,"张三"); us.add(u ); } }
执行步骤:

- Test是程序的入口
- service层进行数据加密,自己无法完成数据库的操作,要依赖dao
- dao层进行数据库的操作
配置AOP
- 创建一个增强类(墙)
Before.java
package aop; import org.springframework.aop.MethodBeforeAdvice; import java.lang.reflect.Method; / * @BelongsProject: spring-AOP * @Author: GuoAn.Sun * @CreateTime: 2020-06-30 10:29 * @Description: 前置增强 */ public class Before implements MethodBeforeAdvice { @Override public void before(Method method, Object[] objects, Object o) throws Throwable { System.out.println("前--------墙----------"); } }
切入点表达式
具体的add方法
讯享网public boolean add(models.User)
返回值和参数随便的add方法
public * add(..)
匹配service.impl层中的所有类的所有方法,参数随便
讯享网* service.impl.*.*(..) servive.impl.A.x(int i)
匹配service.impl层中的子包下的所有类的所有方法,参数随便
* service.impl..*.*(..) servive.impl.test.A.x(int i)
任何一个名字以add开头的方法,返回值和参数随便
讯享网* add*(..)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/117455.html