相关疑难解决方法(0)

从对象本身获取AOP代理

有可能在Spring中获取给定对象的代理吗?我需要调用子类的函数.但是,显然,当我直接打电话时,方面不适用.这是一个例子:

public class Parent {

    public doSomething() {
        Parent proxyOfMe = Spring.getProxyOfMe(this); // (please)
        Method method = this.class.getMethod("sayHello");
        method.invoke(proxyOfMe);
    }
}

public class Child extends Parent {

    @Secured("president")
    public void sayHello() {
        System.out.println("Hello Mr. President");
    }
}
Run Code Online (Sandbox Code Playgroud)

我找到了实现这一目标的方法.它有效,但我认为不是很优雅:

public class Parent implements BeanNameAware {

    @Autowired private ApplicationContext applicationContext;
    private String beanName; // Getter

    public doSomething() {
        Parent proxyOfMe = applicationContext.getBean(beanName, Parent.class);
        Method method = this.class.getMethod("sayHello");
        method.invoke(proxyOfMe);
    }
}
Run Code Online (Sandbox Code Playgroud)

aop spring spring-aop

21
推荐指数
3
解决办法
2万
查看次数

从服务类中调用Spring @Transactional时,此方法不适用于带注释的方法

在下面的代码中,当从methodOuter内部调用methodInner()时,应处于事务范围内。但事实并非如此。但是,当直接从MyController类调用methodInner()时 ,它受事务绑定。有什么解释吗?

这是控制器类。

@Controller
public class MyController {

    @Autowired
    @Qualifier("abcService")
    private MyService serviceObj;

    public void anymethod() {
        // below call cause exception from methodInner as no transaction exists  
        serviceObj.methodOuter(); 
    }

}
Run Code Online (Sandbox Code Playgroud)

这是服务等级

@Service("abcService")
public class MyService {

    public void methodOuter() {
        methodInner();
    }

    @Transactional
    public void methodInner() {
    .....
    //does db operation.
    .....
    }
}
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc spring-transactions

5
推荐指数
1
解决办法
2677
查看次数

@Async方法中的Spring @Async方法

您好,我正在尝试 Springs 异步执行器,发现您可以使用 @Async。我想知道是否有可能使用@Asyncinside @Async,要求是将任务委托给@Async第一个@Async方法中调用的方法。

例如:一个目录中有 100 个文件,需要创建在 5 个线程中处理 20 个文件的作业。

spring multithreading asynchronous threadpool

3
推荐指数
1
解决办法
5778
查看次数