aop引入案例
1.0版本
public void saveAdmin(Admin admin){
jdbcTemplate.update("insert into admin(account,password)value(?,?)","cccc","2222");
}
1.1版本
public void saveAdmin(Admin admin){
验证功能()
jdbcTemplate.update("insert into admin(account,password)value(?,?)","cccc","2222");
}
public void updateAdmin(Admin admin){
验证功能()
jdbcTemplate.update("insert into admin(account,password)value(?,?)","cccc","2222");
}
1.2版本
public void saveAdmin(Admin admin){
//业务代码
if(admin.getAccount!=null){
jdbcTemplate.update("insert into admin(account,password)value(?,?)","cccc","2222");
}
}
非业务代码:
验证功能(){
}
输出日志(){
}
提交事务(){
}
统一异常处理(){
}
代理对象(4s 中介 手机店)
告诉代理对象,调用哪个方法时,让代理对象去帮助我们调用哪个方法
底层实现: 使用的是动态代理模式
springAOP 实现(具体操作)
(1)下载 AOP 相关 jar
(2) 方式一:基于aspectj的xml配置
public class MyUtil {public void printLog(){System.out.println("打印日志");}public void commit(){System.out.println("提交事务");}public void exceptionAdmin(Throwable e){System.out.println("异常:"+e.getMessage());}
}
@Repository(value = "adminDao")
public class AdminDao {@AutowiredJdbcTemplate jdbcTemplate;public void saveAdmin(Admin admin){System.out.println("保存管理员");}public void saveAdmin(){System.out.println("保存管理员1");}public void updateAdmin(){System.out.println("修改管理员");}
}
//在.xml中配置
<bean id="myutil" class="com.ffyc.ssm.util.MyUtil"></bean><aop:config><aop:pointcut id="saveAdmin" expression="execution(* com.ffyc.ssm.dao.AdminDao.saveAdmin(..))"/><aop:aspect ref="myutil"><aop:before method="printLog" pointcut-ref="saveAdmin"></aop:before><aop:after-returning method="printLog" pointcut-ref="saveAdmin"></aop:after-returning><aop:after method="printLog" pointcut-ref="saveAdmin"></aop:after><aop:after-throwing method="exceptionAdmin" pointcut-ref="saveAdmin" throwing="e"></aop:after-throwing></aop:aspect></aop:config>
环绕通知
方式二:注解
在方法上注释