Spring AOP 实例

来源:互联网 发布:企业java编程思想 pdf 编辑:程序博客网 时间:2024/06/18 06:40

方式一:xml配置文件实现

这里写图片描述

BaseDao.java

package com.guo.dao;public interface BaseDao {    public void insert();    public void delete();    public void update();    public void select();}

OptLogger.java

package com.guo.dao;public class OptLogger {    public void myBefore() {        System.out.println("before ...");    }}

UserDao.java

package com.guo.dao;public class UserDao implements BaseDao {    public void insert() {        System.out.println("insert()");    }    public void delete() {        System.out.println("delete()");    }    public void update() {        System.out.println("update()");    }    public void select() {        System.out.println("select()");    }}

applicationContext.xml

<?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:context="http://www.springframework.org/schema/context"    xmlns:aop="http://www.springframework.org/schema/aop"    xsi:schemaLocation="        http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context.xsd        http://www.springframework.org/schema/aop         http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">    <bean id="userDao" class="com.guo.dao.UserDao"></bean>    <bean id="optLogger" class="com.guo.dao.OptLogger"></bean>    <aop:config>        <aop:aspect ref="optLogger">            <aop:before method="myBefore" pointcut="execution(* com.guo.dao.UserDao.*(..))" />        </aop:aspect>    </aop:config></beans>

UserDaoTest.java

package com.guo.test;import org.junit.Before;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.guo.dao.BaseDao;import com.guo.dao.UserDao;public class UserDaoTest {    public ApplicationContext context;    @Before    public void init() {        context = new ClassPathXmlApplicationContext("applicationContext.xml");    }    @Test    public void test1() {        System.out.println("--------------无参构造实例化-----------------");        BaseDao userDao = context.getBean("userDao", BaseDao.class); // aop 有效        userDao.insert();        BaseDao userDao1 = (BaseDao) context.getBean("userDao");// aop 有效        userDao1.delete();        UserDao userDao2 = (UserDao) context.getBean("userDao");// aop 无效        userDao2.update();        BaseDao userDao3 = context.getBean("userDao", UserDao.class);// aop 无效        userDao3.delete();        UserDao userDao4 = context.getBean("userDao", UserDao.class);// aop 无效        userDao4.update();        System.out.println("end");    }}

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.guo</groupId>    <artifactId>maven-spring-aop</artifactId>    <version>0.0.1-SNAPSHOT</version>    <dependencies>        <!-- junit单元测试 -->        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.12</version>            <scope>test</scope>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-test</artifactId>            <version>4.2.0.RELEASE</version>            <scope>test</scope>        </dependency>        <!-- spring IOC -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context</artifactId>            <version>4.2.0.RELEASE</version>        </dependency>        <!-- spring AOP -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-aspects</artifactId>            <version>4.2.0.RELEASE</version>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <artifactId>maven-compiler-plugin</artifactId>                <version>3.5.1</version>                <configuration>                    <source>1.7</source>                    <target>1.7</target>                    <encoding>UTF-8</encoding>                </configuration>            </plugin>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-source-plugin</artifactId>                <version>3.0.1</version>                <executions>                    <execution>                        <id>attach-sources</id>                        <goals>                            <goal>jar</goal>                        </goals>                    </execution>                </executions>            </plugin>        </plugins>    </build></project>

方式二:注解方法实现

只需修改方式一中的两个文件:

OptLogger.java

package com.guo.dao;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;@Aspectpublic class OptLogger {    @Before("execution(* com.guo.dao.UserDao.*(..))")    public void myBefore() {        System.out.println("before ...");    }}

applicationContext.xml

<?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:context="http://www.springframework.org/schema/context"    xmlns:aop="http://www.springframework.org/schema/aop"    xsi:schemaLocation="        http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context.xsd        http://www.springframework.org/schema/aop         http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">    <bean id="userDao" class="com.guo.dao.UserDao"></bean>    <bean id="optLogger" class="com.guo.dao.OptLogger"></bean>    <aop:aspectj-autoproxy></aop:aspectj-autoproxy></beans>
原创粉丝点击