手动实现AOP编程

    xiaoxiao2026-01-08  7

    AOP 面向切面的编程,

             AOP可以实现“业务代码”与“关注点代码”分离

    // 保存一个用户 public void add(User user) { Session session = null; Transaction trans = null; try { session = HibernateSessionFactoryUtils.getSession(); // 【关注点代码】 trans = session.beginTransaction(); // 【关注点代码】 session.save(user); // 核心业务代码 trans.commit(); //…【关注点代码】 } catch (Exception e) { e.printStackTrace(); if(trans != null){ trans.rollback(); //..【关注点代码】 } } finally{ HibernateSessionFactoryUtils.closeSession(session); ..【关注点代码】 } }

    分析总结:

             关注点代码,就是指重复执行的代码。

             业务代码与关注点代码分离,好处?

                --à 关注点代码写一次即可;

                       -à开发者只需要关注核心业务;

                       -à运行时期,执行核心业务代码时候动态植入关注点代码; 【代理】

    下面是一个简单的具体实现例子

    1.IUserDao

    package cn.itcast.d_myaop; //接口 public interface IUserDao { void save(); } 2.UserDao

    package cn.itcast.d_myaop; import javax.annotation.Resource; import org.springframework.stereotype.Component; @Component public class UserDao implements IUserDao{ // 重复执行代码形成的一个类 @Resource private Aop aop; @Override public void save() { aop.begin(); System.out.println("----核心业务:保存!!!----"); aop.commit(); } } 3.Aop

    package cn.itcast.d_myaop; import org.springframework.stereotype.Component; @Component public class Aop{ // 重复执行的代码 public void begin() { System.out.println("开始事务/异常"); } public void commit() { System.out.println("提交事务/关闭"); } } 4.bean.xml

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 开启注解扫描 --> <context:component-scan base-package="cn.itcast.d_myaop"></context:component-scan> </beans> 5.Junit

    package cn.itcast.d_myaop; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { ApplicationContext ac=new ClassPathXmlApplicationContext("cn/itcast/d_myaop/bean.xml"); @Test public void testApp(){ IUserDao userDao=(IUserDao) ac.getBean("userDao"); userDao.save(); } }

    转载请注明原文地址: https://ju.6miu.com/read-1305776.html
    最新回复(0)