目标:第三大步实现不需要手动配置。
只需要把通知和切入点关联形成切面就可以了。
从spring容器获得目标类,配置aop将自动生成代理。
<aop:config>
<aop:pointcut id="myPoint" expression="execution( * com.zyh.service...(..))"/>
<aop:advisor advice-ref="circleLog" pointcut-ref="myPoint"/>
</aop:config>
切入点表达式部分讲解:
image.png
开发流程
第一步:创建目标类
目标类为 AutoServiceImpl 实现 AutoService
@Service("autoService")
public class AutoServiceImpl implements AutoService {
@Qualifier("autoDao")
@Autowired
private AutoDaoImpl autoDao;
@Override
public void addAuto() {
autoDao.addAuto();
}
}
@Repository("AnnotationDaoImpl")
public class AnnotationDaoImpl implements AnnotationDao {
@Override
public void addAnnotation() {
Log.info("我是AnnotationDaoImpl 里面的方法");
}
@Override
public String returnAnnotation() {
return "我是 我是AnnotationDaoImpl 里面返回数据的一个方法";
}
}
第二步:创建通知类
@Component("circleLog")
public class LogCircleAdvice implements MethodInterceptor {
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
Log.info("环绕前");
Object proceed = invocation.proceed();
Log.info("环绕后" );
return proceed;
}
}
第三步:AOP全自动编程
<aop:config>
<aop:pointcut id="myPoint" expression="execution( * com.zyh.service..*.*(..))"/>
<aop:advisor advice-ref="circleLog" pointcut-ref="myPoint"/>
</aop:config>
第四步:测试
@Test
public void testAutoService(){
ClassPathXmlApplicationContext classPathXmlApplicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
AutoService autoService = (AutoService) classPathXmlApplicationContext.getBean("autoService");
autoService.addAuto();
}
输出结果如下所示:
image.png
可以根据修改如下引用进行修改 通知类 : 就不一一列举了
image.png
网友评论