【发布时间】:2014-12-12 11:09:34
【问题描述】:
我正在学习 Spring Core 认证,我有以下疑问,试图了解 AOP 上下文选择切入点 是如何工作的,以及它的用途。
所以查看我阅读的文档,切入点也可以选择有用的连接点上下文,而不是通过调用与特定建议关联的方法执行来表示的简单情况.
比如:
- 当前正在执行的对象(代理)
- 目标对象
- 方法参数
- 与方法、目标或 论据
所以在我看来,它以这种方式被用来做更多的事情,而不是像在调用此方法时自动执行此操作,是真的吗?
现在在文档中有以下 2 个与 CONTEXT SELECTING 相关的示例(我有些难以理解)。
考虑以下要求:每次服务器即将启动时记录一条消息
public interface Server {
public void start(Map input);
public void stop();
}
在建议中,我们如何访问Server?并映射?
1) 第一个示例:没有上下文选择:
在文档中说必须从 JoinPoint 对象获取所有需要的信息,以这种方式:
@Before(“execution(void example.Server.start(java.util.Map))”)
public void logServerStartup(JoinPoint jp) {
// A 'safe' implementation would check target type
Server server = (Server) jp.getTarget();
// Don't assume args[0] exists
Object[] args= jp.getArgs();
Map map = args.length > 0 ? (Map) args[0] : new HashMap();
logger.info( server + “ starting – params: “ + map);
}
所以我认为这意味着:每次在我的 Server 上执行 start() 方法时,执行下面的 logServerStartup() 建议方法,它对吗?
现在在我看来,它通过 JointPoint 对象提取了 Server 信息和 Map 输入参数内容。
什么能代表这个对象?它是 AspectJ 对象还是与 Spring AOP 对象相关?包含什么以及它是如何工作的?
2) 第二个例子:没有选择:
@Before(“execution(void example.Server.start(java.util.Map)) && target(server) && args(input)”)
public void logServerStartup(Server server, Map input) {
…
}
所以在我看来,在这个切入点中,我还包括一些包含在我的应用程序上下文中的信息作为服务器和与关节点的执行相关的输入参数(Map 对象)(当 start() 方法是在 Server 对象上调用)。
正确吗? target(server) 方法究竟是做什么的?
你能解释一下具体是如何工作的吗?
Tnx
【问题讨论】:
-
Andrea,您可以在 StackOverflow 上使用一个帐户吗?你似乎使用了几个。名称相同,但帐户不同。
-
opsss...对于一个错误,我认为我是使用我的其他电子邮件地址登录的!!!!现在我会回来只使用主要的!!!
标签: java spring spring-mvc aop spring-aop