java框架之spring(五)
阿新 • • 發佈:2018-12-29
註解方式 AOP
本章節把XML方式配置AOP改造為註解方式
1、註解配置業務類
使用@Component("hjsy2") 註解ProductService 類
package com.hjsy.service;
import org.springframework.stereotype.Component;
@Component("hjsy2")
public class ProductService {
public void doSomeService(){
System.out.println("doSomeService");
}
}
2、註解配置切面
@Aspect 註解表示這是一個切面
@Component 表示這是一個bean,由Spring進行管理
@Around(value = "execution(* com.hjsy.service.ProductService.*(..))") 表示對com.hjsy.service.ProductService 這個類中的所有方法進行切面操作
3、修改applicationContext.xml檔案package com.hjsy.aspect; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; @Aspect @Component public class LoggerAspect { @Around(value = "execution(* com.hjsy.service.ProductService.*(..))") public Object log(ProceedingJoinPoint joinPoint) throws Throwable { System.out.println("start log:" + joinPoint.getSignature().getName()); Object object = joinPoint.proceed(); System.out.println("end log:" + joinPoint.getSignature().getName()); return object; } }
去掉原有資訊,新增如下3行:
<context:component-scan base-package="com.hjsy.aspect"/>
<context:component-scan base-package="com.hjsy.service"/>
掃描包com.hjsy.aspect和com.hjsy.service,定位業務類和切面類
<aop:aspectj-autoproxy/>
找到被註解了的切面類,進行切面配置
4、測試,執行測試類輸出結果<?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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="com.hjsy.aspect"/> <context:component-scan base-package="com.hjsy.service"/> <aop:aspectj-autoproxy/> </beans>
package spring;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.hjsy.pojo.Category;
import com.hjsy.pojo.Product;
import com.hjsy.service.ProductService;
public class TestSpring {
public static void main(String[] args) {
ApplicationContext context1 = new ClassPathXmlApplicationContext(new String[] { "applicationContext.xml" });
ProductService s = (ProductService) context1.getBean("hjsy2");
s.doSomeService();
}
}
5、註解方式測試
註解方式用到了junit,用到了以下兩個jar包,在專案lib目錄下
junit-4.12.jar和hamcrest-all-1.3.jar
6、修改測試類
修改TestSpring.java, 並執行
1. @RunWith(SpringJUnit4ClassRunner.class)
表示這是一個Spring的測試類
2. @ContextConfiguration("classpath:applicationContext.xml")
定位Spring的配置檔案
3. @Autowired
給這個測試類裝配Category物件
4. @Test
測試邏輯,列印Category物件的名稱
package spring;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.hjsy.pojo.Category;
import com.hjsy.pojo.Product;
import com.hjsy.service.ProductService;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class TestSpring {
// public static void main(String[] args) {
// ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "applicationContext.xml" });
// Category category = (Category) context.getBean("hjsy");
// System.out.println(category.getName());
// ApplicationContext context1 = new ClassPathXmlApplicationContext(new String[] { "applicationContext.xml" });
// Product product = (Product) context1.getBean("hjsy1");
// System.out.println(product.getName());
// System.out.println(product.getCategory().getName());
// ApplicationContext context2 = new ClassPathXmlApplicationContext(new String[] { "applicationContext.xml" });
// ProductService s = (ProductService) context2.getBean("hjsy2");
// s.doSomeService();
@Autowired
Category c;
@Test
public void test(){
System.out.println(c.getName());
}
// }
}
原始碼:連結:https://pan.baidu.com/s/1o9lqtlg 密碼:e191