博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring的注解学习(ioc,aop结合)
阅读量:5793 次
发布时间:2019-06-18

本文共 2898 字,大约阅读时间需要 9 分钟。

首先引入jar包

aspectjrt.jar

aspectjweaver.jar

1、dao

package com.dao;public interface OkpDao {	public void save();	public void update();}

2、impl

package com.dao.impl;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Component;import com.dao.OkpDao;@Component("okpDaoImpl")public class OkpDaoImpl implements OkpDao{		public void save() {		System.out.println("OkpDaoImpl.save()");	}	public void update() {		System.out.println("OkpDaoImpl.update()");			}}

3、service

package com.service;import javax.annotation.PostConstruct;import javax.annotation.PreDestroy;import javax.annotation.Resource;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.stereotype.Component;import com.dao.OkpDao;@Componentpublic class OkpService {	private OkpDao okpDao;	public OkpDao getOkpDao() {		return okpDao;	}	@Resource(name="okpDaoImpl")	public void setOkpDao(OkpDao okpDao) {		this.okpDao = okpDao;	}	public void save(){		this.okpDao.save();	}	public void update(){		this.okpDao.update();	}	@PostConstruct	public void init(){				System.out.println("容器创建前执行");	}		@PreDestroy	public void destory(){		System.out.println("容器销毁后执行");	}}

 4、切面类

package com.service;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.springframework.stereotype.Component;@Aspect@Componentpublic class SaveInter {		@Pointcut("execution(* com.service.OkpService.*(..))")	public void method(){};		@Before("method()")	public void before(){		System.out.println("前置通知");	}	@AfterReturning("method()")  	public void doAfter(){  		System.out.println("后置通知");  	}  	@After("method()")	public void after(){		System.out.println("最终通知");	}}

@Aspect切面类

@Component 将该类加载到spring容器

@Poincut 定义一个切面

@Before 当执行切面中的方法前,会执行

@AfterReturning 方法执行完执行

@After 相当于方法中的try{}catch{}finally{}中的finally,执行完方法前会执行 

 5、测试类

package com.service;import org.junit.Test;import org.springframework.beans.factory.BeanFactory;import org.springframework.context.support.ClassPathXmlApplicationContext;public class OkpServiceTest {	@Test	public void testSave() {		BeanFactory bf=new ClassPathXmlApplicationContext("applicationContext.xml");		OkpService okp=(OkpService) bf.getBean("okpService");		okp.save();		okp.update();	}}

  6、配置文件

   使用Aop注解,xml配置文件中要加入<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

运行结果:

log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).

log4j:WARN Please initialize the log4j system properly.
容器创建前执行
前置通知
OkpDaoImpl.save()
最终通知
后置通知
前置通知
OkpDaoImpl.update()
最终通知
后置通知

 

 

转载于:https://www.cnblogs.com/volare/p/3677274.html

你可能感兴趣的文章
一个不错的vue项目
查看>>
屏蔽指定IP访问网站
查看>>
根据毫秒数计算出当前的“年/月/日/时/分/秒/星期”并不是件容易的事
查看>>
python的图形模块PIL小记
查看>>
shell变量子串
查看>>
iOS的主要框架介绍 (转载)
查看>>
react报错this.setState is not a function
查看>>
poj 1183
查看>>
从根本解决跨域(nginx部署解决方案)
查看>>
javascript实现的一个信息提示的小功能/
查看>>
Centos7.x:开机启动服务的配置和管理
查看>>
HTML5 浏览器返回按钮/手机返回按钮事件监听
查看>>
xss
查看>>
iOS:百度长语音识别具体的封装:识别、播放、进度刷新
查看>>
JS获取服务器时间并且计算距离当前指定时间差的函数
查看>>
华为硬件工程师笔试题
查看>>
jquery居中窗口-页面加载直接居中
查看>>
cd及目录快速切换
查看>>
Unity Shaders and Effects Cookbook (3-5) 金属软高光
查看>>
31-hadoop-hbase-mapreduce操作hbase
查看>>