在第一节中,我们自己模拟了一个Spring,实现一个保存用户的操作,假如现在有一个需求,在保存的时候记录日志,该怎么做呢?
暂且将记录日志操作就简单的变为在保存用户前输出一句话“save start...”,不建议直接在UserDAOImpl的save方法里写代码,因为我们有时候可能得不到源码,这个时候可以添加一个UserDAOImpl2继承UserDAOImpl,然后调用父类的save方法
package com.bjsxt.dao.impl; import com.bjsxt.model.User; public class UserDAOImpl2 extends UserDAOImpl { @Override public void save(User user) { System.out.println("save start..."); super.save(user); } }
UserDAOImpl2
注:配置文件被注入到UserService的bean的class要改为UserDAOImpl2,下面也一样
看似实现了效果,但是这样很不灵活,因为只能继承一个类,而且父类发生变化,子类也必须跟着做出改变,我们可以再添加一个类继承UserDAOImpl,但是采用组合的方法
package com.bjsxt.dao.impl; import com.bjsxt.aop.LogInterceptor; import com.bjsxt.dao.UserDAO; import com.bjsxt.model.User; public class UserDAOImpl3 implements UserDAO { private UserDAO userDAO = new UserDAOImpl(); public void save(User user) { System.out.println("save start..."); /*new LogInterceptor().beforeMethod(null);*/ userDAO.save(user); } /*public void delete() { // TODO Auto-generated method stub }*/ }
UserDAOImpl3
问题又来了,如果系统有500个需要被注入的bean,每个bean都有一些操作需要被记录日志,难道要组合500个bean来实现这个功能吗?这时AOP登场了...
时间: 2024-10-03 14:45:28