Spring的注解学习(ioc,aop结合)

首先引入jar包

aspectjrt.jar

aspectjweaver.jar

1、dao

1
2
3
4
5
6
package com.dao;
 
public interface OkpDao {
    public void save();
    public void update();
}

2、impl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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;
@Component
public 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、切面类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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
@Component
public 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、测试类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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、配置文件

Spring的注解学习(ioc,aop结合)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:tx="http://www.springframework.org/schema/tx" 
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:context="http://www.springframework.org/schema/context" 
        xmlns:jee="http://www.springframework.org/schema/jee"
        xsi:schemaLocation="
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
            http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd">
        <context:annotation-config />
        <context:component-scan base-package="com"></context:component-scan>
        <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>
Spring的注解学习(ioc,aop结合)

   使用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()
最终通知
后置通知

 

 

Spring的注解学习(ioc,aop结合),布布扣,bubuko.com

Spring的注解学习(ioc,aop结合)

上一篇:HTML5游戏探讨,怎样让微信游戏仅仅能执行在微信中


下一篇:千万大军剑拔弩张 1945年的美苏两军谁是霸主?(苏联陆军强大,但国力远远不是美国的对手。微信号:熊熊点兵)