Spring_AOP_Annotation

1.目录结构

2.User

package com.cloud.spring.model;

/**
 * @author cloud
 * @data 2016年5月13日
 * @version 1.0
 * @description:普通的JavaBean
 */
public class User {
    private String username;
    private String password;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

 

3.UserDAO

package com.cloud.spring.dao;

import com.cloud.spring.model.User;

/**
 * @author cloud
 * @data 2016年5月13日
 * @version 1.0
 * @description:定义接口,定义规范,必须实现save方法
 */
public interface UserDAO {
    public void save(User user);
    public void delete(User user);
}

 

4.UserDAOImpl

package com.cloud.spring.dao.imp;

import org.springframework.stereotype.Component;

import com.cloud.spring.dao.UserDAO;
import com.cloud.spring.model.User;

/**
 * 
 * @author cloud
 * @data 2016年5月13日
 * @version 1.0
 * @description:实现接口,重写方法
 */
@Component
public class UserDAOImpl implements UserDAO {

    public void save(User user) {
        System.out.println("user saved!");
    }

    public void delete(User user) {
        System.out.println("user delete!");
    }
}

 

5.UserService

package com.cloud.spring.service;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.cloud.spring.dao.UserDAO;
import com.cloud.spring.model.User;

/**
 * 
 * @author cloud
 * @data 2016年5月13日
 * @version 1.0
 * @description:真正的业务处理
 */
@Component("userService")
public class UserService {
    
    private UserDAO userDAO;

    public void add(User user) {
        userDAO.save(user);
    }
    
    public void delete(User user) {
        userDAO.delete(user);
    }

    public UserDAO getUserDAO() {
        return userDAO;
    }

    @Resource
    public void setUserDAO(UserDAO userDAO) {
        this.userDAO = userDAO;
    }
}

 

6.LogIntercepter

package com.cloud.spring.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

//声明是一个切面类,并交给Spring容器管理
@Aspect
@Component
public class LogInterceper {
    // 被代理对象必须也是Spring容器管理的,自己创建的对象并不能使用,因此需要@Component给Spring管理
    // 过滤器符合的,方法执行
    @Before("execution(* com.cloud.spring.dao.imp..*.*(..))")
    public void before() {
        System.out.println("method start");
    }

    @AfterReturning("execution(* com.cloud.spring.dao.imp..*.*(..))")
    public void afterReturning() {
        System.out.println("method end");
    }

    @Around("execution(* com.cloud.spring.dao.imp..*.*(..))")
    public Object doConcurrentOperation(ProceedingJoinPoint pjp) throws Throwable {
        System.out.println("around begin");
        Object retVal = pjp.proceed();
        System.out.println("around end");
        return retVal;

    }

    /**
     * 语法 所有的public方法:public修饰---任何包下---任何方法
     *  execution(public * *(..))
     * 
     * 所有以set开头的方法:任何修饰---任何包----任何返回值---任何方法
     *  execution(* set*(..))
     * 
     * 所有这个service下的方法:任何修饰----指定类下----任何方法 execution(*
     * com.xyz.service.AccountService.*(..))
     * 
     * 所有这个包下的任何方法:任何修饰----指定包下----任何类---任何方法 execution(*
     * com.xyz.service.*.*(..))
     * 
     * 所有这个包及其子包下的任何方法:任何修饰----指定包以及子包下---任何类----任何方法 execution(*
     * com.xyz.service..*.*(..))
     */

}

 

7.TestSpring

package com.cloud.spring.test;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.cloud.spring.model.User;
import com.cloud.spring.service.UserService;

public class TestSpring {
    public static void main(String[] args) {
        try {
            ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
            UserService service = (UserService)ctx.getBean("userService");
            service.add(new User());
            service.delete(new User());
        } catch (BeansException e) {
            e.printStackTrace();
        }
    }
}

 

8.beans.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.xsd">
        
    <context:component-scan base-package="com.cloud.spring" />
    
    <!-- 自动产生代理 -->
    <!-- 使用注解的方式时需要添加这句代码 -->
    <aop:aspectj-autoproxy />
</beans>

 

posted @ 2016-05-22 20:04  桃源仙居  阅读(140)  评论(0)    收藏  举报