我有一个班级Book
:
package book;
public class Book {
private String title;
public Book(String title) {
this.title = title;
}
public boolean equals(Object object) {
if(object instanceof Book) {
Book book = (Book) object;
return this.title.equals(book.title);
}
return false;
}
}
这是我的Aspect类和Configuration类:
package book;
@Aspect
@Component
public class Logging {
@Pointcut("execution(* java.lang.Object.equals(..))")
private void equals() {}
@Before("equals()")
public void log() {
System.out.println("logging...");
}
}
package book;
@Configuration
@ComponentScan
@EnableAspectJAutoProxy
public class Config {
}
这是我的测试课程:
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = Config.class)
public class LoggingTest {
@Value("#{new book.Book('book1')}")
private Book book;
@Value("#{new book.Book('book2')}")
private Book book2;
@Test
public void test() {
assertFalse(book.equals(book2));
}
}
此测试类成功运行。但是没有打印预期的logging...
。你能告诉我我的代码有什么问题吗?
提前致谢!
答案 0 :(得分:1)
Spring AOP与AspectJ不同。与AspectJ相比,Spring AOP有很多限制,它只适用于Spring托管bean。使用带有Book
注释的脚本表达式创建的@Value
对象不是Spring托管bean,因此不会对它们应用AOP功能。