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 {
@Autowired
JdbcTemplate 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>
环绕通知
方式二:注解
在方法上注释