Spring 学习笔记(九)AOP 之注解方式与零配置方式

术语先来一发

  • 目标对象(Target)
  • 代理对象(Proxy)
  • 连接点(Joinpoint)
  • 切入点(Pointcut)
  • 通知(增强)(Advice)
  • 切面(Aspect、Advisor)
  • 织入、切入(weaving)

1. 创建目标对象和代理对象, 目标对象还和Spring IOC一样的注解, 下面是代理类

增加了@Aspect以及描述方法的通知类型

package org.spring.exampleAOP;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

/**
 * 切面类
 */
@Component  //首先创建对象
@Aspect     //再说明此对象是代理对象
public class MyAspect1 {

    @After("execution(* org.spring.exampleAOP.Sadamu.*(..))") //切入点表达式  After置后执行
    public void log(){
        System.out.println("记录日志");
    }
}

2. applicationContext.xml的配置

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       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
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">

    <!--1,配置要扫描的包-->
    <context:component-scan base-package="org.spring.exampleAOP" />
    <!--2,开启代理-->
    <aop:aspectj-autoproxy /> 
</beans>

3. 零配置也就是在Spring配置类中增加了开启代理注解 @EnableAspectJAutoProxy

package org.spring.exampleAOP;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.PropertySource;

/**
 * spring 配置类
 */
@Configuration
@ComponentScan(value = {"org.spring.exampleAOP"}) //注解扫描
@PropertySource(value="classpath:my.properties")  //加载配置文件
@EnableAspectJAutoProxy
//@Import(value={SpringConfig.class})  // 导入多个配置类 对于properties
public class SpringConfig {


}

4. 测试, 还和原来一样

package org.spring.exampleAOP;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; 


public class Test {
    public static void main(String[] args) {
        //读取xml文件
        //ApplicationContext applicationContext1 = new FileSystemXmlApplicationContext("./src/applicationContext.xml");
        //零配置方式
        ApplicationContext applicationContext1 = new AnnotationConfigApplicationContext(SpringConfig.class);
        //获取Bean对象
        People people1 = (People) applicationContext1.getBean("sadamu");
        people1.Shoot();

    }
}

5. 测试结果

萨达姆开枪了
记录日志

Process finished with exit code 0

猜你喜欢

转载自blog.csdn.net/baitianmingdebai/article/details/85007237
今日推荐