有可能在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) 在下面的代码中,当从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) 您好,我正在尝试 Springs 异步执行器,发现您可以使用 @Async。我想知道是否有可能使用@Asyncinside @Async,要求是将任务委托给@Async第一个@Async方法中调用的方法。
例如:一个目录中有 100 个文件,需要创建在 5 个线程中处理 20 个文件的作业。