- 问题
//在同一个业务类中,一个业务方法调用另一个业务方法
//问题: login方法添加有额外功能
// register方法没有添加额外功能
public class UserServiceImpl implements UserService {
@Override
public void login(String username, String password) {
System.out.println("UserServiceImpl.login");
this.register(new User());
}
@Override
public void register(User user) {
System.out.println("UserServiceImpl.register");
}
}
- 分析
调用login方法的,是代理对象,而调用register方法的,是原始对象,所以没有加上额外功能
能不能在login方法中再获取一个代理对象,从而使代理对象调用register方法呢?
不能,我们知道Spring工厂是一个重量级资源,一个应用应当创建一个Spring工厂
- 解决
使业务类再实现ApplicationContextAware接口
实现接口的setApplicationContext方法,这个方法的作用是获取创建的Spring工厂对象
- 编码
public class UserServiceImpl implements UserService, ApplicationContextAware {
private ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.context = applicationContext;
}
@Override
public void login(String username, String password) {
System.out.println("UserServiceImpl.login");
UserService userService = (UserService) context.getBean("userService");
userService.register(new User());
}
@Override
public void register(User user) {
System.out.println("UserServiceImpl.register");
}
}
Original: https://www.cnblogs.com/suwuji/p/16514906.html
Author: 苏无及
Title: 第二十章 AOP开发中的坑
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612588/
转载文章受原作者版权保护。转载请注明原作者出处!