spring之AOP

AOP

Aspect(切面) Oritend(面向)Progrmming(编程) 面向切面编程

Advice(通知)     connetpoint(连接点)       pointcut(切点)   caspect(切面)    advisor(织入)

 

软件系统可以是一组关注点组成的,直接的业务关注点就是直切关注点(主业务)

为直切关注点提供服务的就是横切关注点(交叉业务)。

切面:横切关注点被模块化的类,就叫切面。也就是增强类。深入的说就是

通知和切点的集合。

通知:增强类中的方法,就是通知。

连接点:在一个应用执行过程中,能插入一个切面的点。也就是说 主业务类的所有方法都是连接点,不一定是切点。

切点:可以切到一个或多个连接点,切到一个方法就是切点。

织入:增强(通知)和切点绑定的过程。

案例:

1. 引依赖

<!--织入的依赖-->
<dependency>
  <groupId> org.aspectj</groupId >
  <artifactId> aspectjweaver</artifactId >
  <version> 1.8.7</version>
</dependency>

2.

 

 

 

Dao层

public interface IUserDAO {   //接口
    public void save(User user);
}

实现类

public class UserDAOImpl implements IUserDAO {
    public void save(User user) {
        System.out.println("sev sess!!!");
    }
}

 

Service层   

public interface IUserService {   //接口
    public void seve2(User user);
}

 //实现类

public class UserServiceImpl implements IUserService {
public void seve2(User user) {

dao.seve(user);
    }
    private IUserDAO dao;    //域属性
    public IUserDAO getDao()
    {
        return dao;
    }
    public void setDao(IUserDAO dao)
    {
        this.dao = dao;
    }

}

AOP层

public class LoggerBeforeAdvice implements MethodBeforeAdvice {
    //Before  实现没实现的方法
    public void before(Method method, Object[] objects, Object o) throws Throwable {
        System.out.println("我比你先执行!!!");
    }
}

配置  注册

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
">

<!-- dao -->

<bean id=”dao”class=“cn...UserDAOImpl”></bean>

Calss 只能写接口实现类

<!-- service -->

<bean id=“service” class=“cn...UserServiceImpl”></bean>

//域属性的注入   用 ref  ref指向 <dean id=dao>

<property name=”dao” ref=”dao”> </property>

<!--advice 通知-->

<bean id=”befoadvice” class=”cn...LoggerBeforeAdvice

”></bean>

<!--切面  要导aop命名空间 -->

xmlns:aop="http://www.springframework.org/schema/aop"
 http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop.xsd

<aop:config>
    <!--01.切点-->

<aop :pointcut id=mypointcut expression=execution

(public void sve2(cn....User))”></aop:pointcut>

 <!--02.织入-->

<aop:advisor advice-ref=”befoadvice” pointcut-ref=”mypintcount”> </aop:advisor>

//测试

public class SpringTest0724 {
 @Test
 //aop测试
     public  void aop01(){
         ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContextspring03aop.xml");
         IUserDAO biz=(IUserDAO) ctx.getBean("dao");
         User user=new User();
         biz.save(user);
         System.out.println("success!");
 }

结果

 

posted @ 2017-08-20 08:56  抱不住太阳的深海  阅读(216)  评论(0编辑  收藏  举报