在SpringBoot中使用AOP切面編程

若是有對SpringAOP不太懂的小夥伴能夠查看我以前的Spring學習系列博客 SpringBoot的出現,大大地下降了開發者使用Spring的門檻,咱們再也不須要去作更多的配置,而是關注於咱們的業務代碼自己,在SpringBoot中使用AOP有兩種方式:html

1、使用原生的SpringAOP(不是很推薦,但這是最基本的應用)

第1步,引入Aspect的相關依賴

<dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.9.1</version>
        </dependency>
	<!--織入器-->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.1</version>
        </dependency>

第二步,在SpringBoot的配置類中開啓AspectJ代理

@SpringBootApplication
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class SpringbootLearnApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringbootLearnApplication.class, args);
	}

}

第三步,寫代碼

  • 建立一個目標類
/**
 * 教師類
 */
@Component
public class HighTeacher {
    private String name;
    private int age;

    public void teach(String content) {
        System.out.println("I am a teacher,and my age is " + age);
        System.out.println("開始上課");
        System.out.println(content);
        System.out.println("下課");
    }

    ...getter and setter
}
  • 切面類,用來配置切入點和通知
/**
 * 切面類,用來寫切入點和通知方法
 */
@Component
@Aspect
public class AdvisorBean {
    /*
    切入點
     */
    @Pointcut("execution(* teach*(..))")
    public void teachExecution() {
    }

    /************如下是配置通知類型,能夠是多個************/
    @Before("teachExecution()")
    public void beforeAdvice(ProceedingJoinPoint joinPoint) {
       Object[] args = joinPoint.getArgs();
        args[0] = ".....大家體育老師生病了,咱們開始上英語課";
        Object proceed = joinPoint.proceed(args);
        
        return proceed;
    }
}
  • 測試類
package cn.lyn4ever.learn.springbootlearn;

import cn.lyn4ever.learn.springbootlearn.teacher.HighTeacher;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@SpringBootTest(classes = SpringbootLearnApplication.class)
@RunWith(SpringRunner.class)
public class SpringbootLearnApplicationTests {

    @Autowired
    HighTeacher highTeacher;

	@Test
	public void contextLoads() {
        highTeacher.setAge(12);
        highTeacher.teach("你們好,咱們你們的體育老師,咱們開始上體育課");
	}
}

結果就是你們想要的,體育課被改爲了英語課 結果就是你們想要的,體育課被改爲了英語課java

2、使用Springboot-start-aop(推薦)

在pom文件中引入web

<dependency>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-aop</artifactId>  
        </dependency>
  • 這一個依賴,就是將多個aop依賴整合到一塊兒,咱們只須要關注代碼的編寫

小魚與Java

相關文章
相關標籤/搜索