1.新建java项目
2.新建lib,导入库:
junit4.12.jar
JUnit是一个Java单元测试框架,由Erich Gamma和Kent Beck创建。
下载地址:https://mvnrepository.com/artifact/junit/junit
hamcrest-all-1.3.jar
一个包含单个工件中的所有子模块的自包含hamcrest jar。
下载地址:https://mvnrepository.com/artifact/org.hamcrest/hamcrest-all/1.3
3.新建实现类Category 和Product :
package com.how2java.pojo;
/**
* 类别
*/
public class Category {
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private int id;
private String name;
}
package com.how2java.pojo;
/**产品类
* @author lenovo
*/
public class Product {
private int id;
private String name;
private Category category;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
}
4.使用注解配置业务类
package com.how2java.service;
import org.springframework.stereotype.Component;
/**
* 业务类
* 使用@Component("s") 注解ProductService 类
* @author lenovo
*/
@Component("s")
public class ProductService {
public void doSomeService(){
System.out.println("doSomeService");
}
}
5.注解配置业务切面,在LoggerAspect类中
package com.how2java.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* 日志切面的功能是 在调用核心功能之前和之后分别打印日志,切面就是新能统计,日志输出,事务管理
* 来与某个核心功能编织之后,用于执行核心功能的代码
* 核心业务:登录,查询,生成订单
* @Aspect 注解表示这是一个切面
* @Component 表示这是一个bean, 由Spring进行管理
* @Around(value = "execution(* com.how2java.service.ProductService.*(..))") 表示对com.how2java.service.ProductService 这个类中的所有方法进行切面操作
* @author lenovo
*/
@Aspect
@Component
public class LoggerAspect {
@Around(value = "execution(* com.how2java.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;
}
}
6.1创建测试类:
package com.how2java.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.how2java.pojo.Category; /** * @author lenovo */ public class SpringOldWayTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "applicationContext.xml" }); Category c = (Category) context.getBean("c"); System.out.println(c.getName()); } }
结果:
category 1
6.2创建测试类
package com.how2java.test; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.how2java.pojo.Category; /** * 1. @RunWith(SpringJUnit4ClassRunner.class) * 表示这是一个Spring的测试类 * * 2. @ContextConfiguration("classpath:applicationContext.xml") * 定位Spring的配置文件 * * 3. @Autowired * 给这个测试类装配Category对象 * * 4. @Test * 测试逻辑,打印c对象的名称 * @author lenovo */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class SpringTest { @Autowired Category c; @Test public void test(){ System.out.println(c.getName()); } }
结果:category 1