【Spring】手动实现AOP编程(十一)
来源:互联网 发布:服务器 定时关机 软件 编辑:程序博客网 时间:2024/06/06 04:38
手动实现AOP编程
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); ////..【关注点代码】 } }
分析总结:
关注点代码,就是指重复执行的代码。
业务代码与关注点代码分离,好处?
--à 关注点代码写一次即可;
-à开发者只需要关注核心业务;
-à运行时期,执行核心业务代码时候动态植入关注点代码; 【代理】
如何分离?
过程式/对象式/代理模式分离
方式一:
UserDao.java
package cn.lfsenior.d_myaop; import javax.annotation.Resource; import org.springframework.stereotype.Component; /** * 目标对象 * */@Component // 加入容器public class UserDao implements IUserDao{// 重复执行代码形成的一个类@Resourceprivate Aop aop; @Overridepublic void save() {aop.begin();System.out.println("-----核心业务:保存!!!------");aop.commite();}}
Aop.java
package cn.lfsenior.d_myaop; import org.springframework.stereotype.Component; @Component // 加入IOC容器public class Aop { // 重复执行的代码public void begin(){System.out.println("开始事务/异常");}public void commite(){System.out.println("提交事务/关闭");}}
App.java
package cn.lfsenior.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/lfsenior/d_myaop/bean.xml"); @Testpublic void testApp() {IUserDao userDao = (IUserDao) ac.getBean("userDao");userDao.save();}}
方式二:
Aop.java
package cn.lfsenior.d_myaop1; import org.springframework.stereotype.Component; @Component // 加入IOC容器 (切面)public class Aop { // 重复执行的代码public void begin(){System.out.println("开始事务/异常");}public void commite(){System.out.println("提交事务/关闭");}}
UserDao.java
package cn.lfsenior.d_myaop1; import org.springframework.stereotype.Component; /** * 目标对象 * */@Component // 加入容器public class UserDao implements IUserDao{ @Overridepublic void save() {System.out.println("-----核心业务:保存!!!------");} }
ProxyFactory.java
package cn.lfsenior.d_myaop1; import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy; /** * 代理工厂 * */public class ProxyFactory {// 目标对象private static Object target;private static Aop aop; // 生成代理对象的方法public static Object getProxyInstance(Object target_,Aop aop_){target = target_;aop = aop_;return Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {aop.begin();// 执行重复代码// 执行目标对象的方法Object returnValue = method.invoke(target, args);aop.commite(); // 执行重复代码return returnValue;}});}}
App.java
package cn.lfsenior.d_myaop1; import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext; public class App {ApplicationContext ac =new ClassPathXmlApplicationContext("cn/lfsenior/d_myaop1/bean.xml"); @Testpublic void testApp() {IUserDao userDao = (IUserDao) ac.getBean("userDao_proxy");System.out.println(userDao.getClass());userDao.save();}}
阅读全文
0 0
- 【Spring】手动实现AOP编程(十一)
- spring中手动实现AOP编程
- 手动实现Spring Aop
- 手动实现AOP编程
- Spring第五篇【cglib、手动实现AOP编程】
- spring 手动实现aop管理事务
- Spring AOP编程(注解实现)
- Spring AOP编程(XML实现)
- Spring:AOP(二)编程方式实现AOP
- spring 手工实现AOP编程
- 第37天(就业班) 静态代理与动态代理、oglib代理、手动实现aop编程、注解实现AOP编程、aop相关的几个注解、xml实现aop、切入点表达式、spring对aop模式
- Spring揭秘(十一)——Spring AOP的实现机制
- 动态代理手动实现Spring AOP的基本功能
- 手动实现Aop
- C# AOP手动实现
- 【Spring】AOP编程(十二)
- Spring AOP:使用NameMatchMethodPointcutAdvisor实现切面编程
- Spring之AOP实现面向切面编程
- makefile
- Ajax-combobox动态绑定数据
- Modbus协议学习(四)
- UVA 11082 Matrix Decompressing——抽象建图+最大流
- 英语学习记录
- 【Spring】手动实现AOP编程(十一)
- 金额转换
- LAMP环境搭建Wordpress
- 训练总结 10.8
- Hadoop基于Linux-CentOS7安装-初识Linux
- 工作流的 CDUR
- 复现数据集画的GT框matlab代码
- QTcpSocket readAll 后程序崩溃
- 最小二乘法推导和证明(matlab代码实现)