文章目录
spring(spring framework系统架构)
整合JUnit
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
在测试test包下,建立包和类,
@Runwith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=SpringConfig.class)
类
可以使用自动装配,在测试方法上加@Test
4.AOP(面向切面编程)依赖核心容器
在不改变原代码的基础上为其进行功能增强(Spring理念:无入侵式)
代理模式实现Aop
连接点,切入点,通知类,通知方法(共性或者追加功能),切面
1.第一步,导入坐标
<!--Aspect切面编程坐标,context坐标也要导-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
2.共性功能抽出,写在通知类的通知方法中
@Component
@Aspect
public class MyAdvice {
//切入点写私有方法
// 切入点表达式:一般是接口里的方法,解耦合
// *,代表任意一个;
// ..,代表0个或1个或多个任意参数
// * org.example..*(..)
// * org.example.*.*Service.*(..)
@Pointcut("execution(void org.example.service.*Service.*(..))")
private void pt(){}
//通知方法,绑定切入点-->切面
// @Before(),@After(),@Around(""),@AfterReturning(value="",returning="ret"),@AfterThrowing()
@Around("pt()")
public Object method(ProceedingJoinPoint pjp) throws Throwable {
//执行共性功能
Signature signature = pjp.getSignature();
signature.getDeclaringTypeName();//类型名
signature.getName();//方法名
Object[] args = pjp.getArgs();//获取方法的参数
Object ret = pjp.proceed(args);//原始操作的执行,args可写可不写
//执行共性功能
return ret;
}
}
3.Spring配置类中
@Configuration//代表配置类
@ComponentScan({"org.example"})//扫描注解
@PropertySource({"db.properties"})//加载配置文件
@Import({JdbcConfig.class,MyBatisConfig.class})
@EnableAspectJAutoProxy//读取AOP切面编程注解
public class SpringConfig {
}
4.案例(百度网盘密码验证)
@Pointcut("execution(* org.example.service.*Service.*(..))")
private void pt(){}
@Around("pt()")
public Object Check(ProceedingJoinPoint pjp) throws Throwable {
Object[] args = pjp.getArgs();
for (int i=0;i<args.length;i++){
if (args[i].getClass().equals(String.class) ){
args[i] = args[i].toString().trim();//去前后空格
}
}
Object ret = pjp.proceed(args);
return ret;
}
@Override
public boolean openURL(String url, String password) {
return password.equals("root");
}