• 面向切面编程 (AOP )的理解


    AOP的全称: Aspact  Oriented  Programming

    AOP的目标(作用):让我们可以“专心做事”  日志记录,事务处理,异常捕获,缓存操作。

    AOP原理

    将复杂的需求分解出不同方面,将散布在系统中的公共功能集中解决

    采用代理机制组装起来运行,在不改变原程序的基础上对代码段进行增强处理,增加新的功能

      AOP的使用

       使用Spring AOP实现系统日志功能

      步骤如下:

    1.搭建分层架构    

    public class User implements Serializable{

    private Integer id; // 用户ID

    private String username; // 用户名

    private String password; // 密码

    }

    2.创建数据访问层接口和实现类

    接口

    public interface IDaoAop {

    public void save(User user);

    }

    实现类

    public class UserDao implements IDaoAop {

    public void save(User user) {

    System.out.println("save success!");

    }

    }

    3.创建业务逻辑层接口和实现类

    public interface IUserBiz {

       public void save(User user);

    }

    实现类

    public class UserBiz implements IUserBiz{

        private IDaAop dao;

    public void save(User user) {

    dao.save(user);

    }

    //dao 属性的setter访问器,会被Spring调用,实现设值注入

    public void setDao(IDaoAop dao) {

    this.dao = dao;

    }

    }

    4.创建前置和后置 处理类

    前置增强

    import java.lang.reflect.Method;

    import org.apache.log4j.Logger;

    import org.springframework.aop.MethodBeforeAdvice;

    public class LoggerBefore implements MethodBeforeAdvice {

    private static final Logger log = Logger.getLogger(LoggerBefore.class);

    public void before(Method arg0, Object[] arguments, Object target)

    throws Throwable {

    log.info("前置内容AAA");

    }

    }

    后置增强

    import java.lang.reflect.Method;

    import org.springframework.aop.AfterReturningAdvice;

    public class LoggerAfter  implements AfterReturningAdvice{

    public void afterReturning(Object returnValue, Method method, Object[] arguments,

    Object target) throws Throwable {

    System.out.println("后置增强代码");

    }

    }

     5.

    Spring配置文件中完成业务对象和DAO的定义和装配,并定义了前置增强和后置增强组件

    <bean id="dao" class ="全路径"/>

    <bean id="dao" class ="全路径"/>

    <property name="dao" ref="dao"></property>

     </bean>

    <!-- 定义前置增强组件 -->

       <bean id="loggerBefore" class="全路径"/>

    <!-- 定义后置增强组件 -->

       <bean id="loggerAfter" class="全路径"/>

    7.测试

    public static void main(String[] args) {

    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

    IUserBiz biz=(IUserBiz)ctx.getBean("biz");

    User user=new User();

    biz.save(user);

    System.out.println("success!");

    切面: 横切关注点被模块化为特殊的类,这些类称为切面。

    优点:每个关注点现在都集中于一处,而不是分散到多处代码中,服务模块更简洁,服务模块只需关注核心代码。

    AOP术语

    定义: 切面也需要完成工作。在AOP术语中,切面的工作被称为通知。

  • 相关阅读:
    SpringBoot2.0之一 新建项目helloWorld
    spring boot 的maven设置阿里云仓库
    新建SpringBoot项目运行页面报错Whitelabel Error Page This application has no explicit mapping for /error, so yo
    SpringBoot2.0 最简单的 idea 快速创建项目
    postgresql 按日期范围查询
    postgreSQL 应用case when的例子
    PostgreSQL 数据库NULL值的默认排序行为与查询、索引定义规范
    ASP.NET中在不同的子域中共享Session
    YKCW6-BPFPF-BT8C9-7DCTH-QXGWCYQ7PR-QTHDM-HCBCV-9GKGG-TB2TM
    Asp.net中基于Forms验证的角色验证授权
  • 原文地址:https://www.cnblogs.com/wangdan123/p/7227946.html
Copyright © 2020-2023  润新知