spring

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");
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值