在其他方法之前调用方法

时间:2017-04-05 07:48:02

标签: java spring annotations aop

如果使用的对象的布尔标志为true,我有很多方法需要“阻止”。 我试着更好地解释一下:我创建了一个需要阻止其他方法的方法,因为它在数据库和文件系统上进行了一些操作,并且为了避免不一致,我必须阻止所有使用相同数据的其他方法。

例如:

方法A 必须更改特定的车队“123”,此操作需要很长时间 方法B 方法C 方法D 使用车队所以我必须检查请求是否适用于车队“123”然后返回例外。

我想知道每个方法中是否有比if子句更聪明的方法,我在设计模式中读到但似乎没有人适合我的情况所以我想使用静态方法的类(更多因为我必须检查车队,车辆或其他车辆,并且在调用方法之前调用这些方法,但是例如可以通过annotation进行检查吗?还是Spring AOP

关于AOP我没有找到是否可以传递一个参数(我必须在方法和建议之间传递队列),如果我可以在方法上指定它的几个方法上使用相同的建议不要忘记在建议中添加新方法。

你有什么建议吗?

更新 为了测试AOP,我创建了一个新项目和这些类: 注释

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAOPAnnotation {
}

AOP课程

@Component
@Aspect
public class TestAOP {

    @Before("@annotation(TestAOPAnnotation)")
    public void logAOP(){
        throw new RuntimeException();
    }
}

我使用注释的方法

@Override
@TestAOPAnnotation
public List<Animals> findByName(String name) throws QueryException {
    try{
        return animalsRepository.findByName(name);
    }catch(Exception e){
        throw new QueryException(e);
    }
}

我抓住异常的地方

@Override
@RequestMapping(value="/test/{name}", method = RequestMethod.GET)
public @ResponseBody List<Animals> findByName(@PathVariable String name){
    try{
        return databaseAnimalsServices.findByName(name);
    }catch(QueryException e){
        return null;
    }catch(Exception e){
        //CATCH AOP EXCEPTION
        List<Animals> list = new ArrayList<Animals>();
        list.add(new Animals("AOP", "exception", "test"));
        return list;
    }
}

如何传递参数,在本例中为String name?我可能有Fleet个对象,fleetIdCar或其他但不同的方法,因为它们需要不同的查询。

0 个答案:

没有答案