java - 在方法的开头使用注入(inject)的 spring bean 和自定义注释做一些事情

标签 java spring annotations aop

我想在每个方法执行之前检查服务类中的用户权限。这是我目前的方法:

appContext.xml:

<bean id="requestSeviceImpl" class="services.impl.RequestSeviceImpl">
    <property name="permissionService" ref="permissionServiceImpl" />
    ...
</bean>

实现:

public class RequestServiceImpl implements RequestService
{
    private PermissionService permissionService;
    ...

    public void setPermissionService(PermissionService permissionService)
    {
        this.permissionService = permissionService;
    }

    @Override
    @Transactional
    public RequestResultModel submitRequest(Request request)
    {
        if(permissionService.isCurrentUserAuthorized(request,"submit"))
        {
            //submit request
        }
        //throw a permission exception
    }

    @Override
    @Transactional
    public void sendRequest(Request request)
    {
        if(permissionService.isCurrentUserAuthorized(request,"send"))
        {
            //send request
        }
        //throw a permission exception
    }

    ...
}

我想要的只是在我的自定义注释中处理权限检查(@Secure);它应该使用permissionService检查权限,并在必要时抛出权限异常。我不想重新实例化 requestServiceImpl 或 PermissionServiceImpl 类(它应该使用 spring beans):

@Override
@Transactional
@Secure(...)
public RequestResultModel submitRequest(Request request)
{
    //submit request
}

我该怎么做?

最佳答案

我能想到的唯一方法是通过 Aspect Oriented Programming (AOP) 。您可以使用 Spring AOP 或 AspectJ。您可能想看看这本书AspectJ in Action 。第一章作为示例提供,将解释您可以使用 AspectJ 做什么。后续章节使用的示例代码完全符合您想要做的事情,即保护方法。

关于java - 在方法的开头使用注入(inject)的 spring bean 和自定义注释做一些事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19145623/

相关文章:

java - 如何将从串口接收到的字节转换为十六进制?

java - jboss-deployment-structure.xml 添加 JAXP 排除

java - 实体继承和鉴别器列

swift - XCode9.4.1 swift : Showing image instead of text on map annotations

java - 为什么 Java GUI 中的大循环滞后/卡住?

java - 如何用java保存一个巨大的bmp文件?

使用 Spring Boot 时出现 Spring 批处理范围问题

java - 是否可以强制 Java 注释的值?

java - 重复注释 - hibernate validator

java - 将两个数组合并为 JSON