zoukankan      html  css  js  c++  java
  • (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术语中,切面的工作被称为通知。

  • 相关阅读:
    主题:钩子函数简析及实例
    boa安装
    Inno Setup入门(二十一)——Inno Setup类参考(7)
    Inno Setup入门(二十)——Inno Setup类参考(6)
    Inno Setup入门(十九)——Inno Setup类参考(5)
    Inno Setup入门(十八)——Inno Setup类参考(4)
    Inno Setup入门(十七)——Inno Setup类参考(3)
    Inno Setup入门(十六)——Inno Setup类参考(2)
    sqlite 增加字段语句
    判断 Selite中标存在或者字段存在的方法
  • 原文地址:https://www.cnblogs.com/2652405350wch/p/7240810.html
Copyright © 2011-2022 走看看