我正在尝试编写一个简单的AspectJ实现,但建议没有被执行。
LoggingAspect类正在启动,就像在控制台中我可以看到s.o.p的构造函数
This is logging aspect
在加载ApplicationContext并初始化controllerAspect时打印。当我运行main方法时,输出是
Name: John Age :12
我期待的是@Before建议的s.o.p应首先打印,然后打印getter方法@AfterReturning s.o.p应打印。
没有编译错误,程序正在运行,但建议没有执行。
根据切入点,建议应该在Customer类的所有方法上实现。
我经历了这里发布的一些类似问题,但无法弄清楚我的实施问题是什么。
任何人都可以解决我所犯的错误并提供解决方案吗?
这是片段servlet-context.xml
<context:component-scan base-package="main.com.controller"/>
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven></annotation-driven>
<aop:aspectj-autoproxy/>
<!-- AOP support -->
<bean id='controllerAspect' class='main.com.logging.LoggingAspect' />
<beans:bean id="cust" class="main.com.dtos.Customer"</beans:bean>
<resources mapping="/resources/**" location="/resources/" />
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/"/>
<beans:property name="suffix" value=".jsp"/>
</beans:bean>
LoggingAspect类是:
@Aspect
public class LoggingAspect {
public LoggingAspect() {
System.out.println("This is logging aspect");
}
@Pointcut("execution(* com.dtos.*.*(..))")
public void getMethodPointcut() {}
@AfterReturning(pointcut = "getMethodPointcut()", returning="retVal")
public void afterReturningAdvice(Object retVal) {
System.out.println("Returning:" + retVal.toString() );
}
@Before("getMethodPointcut()")
public void printBefore(JoinPoint jp ) {
System.out.println("Before calling method:"+jp.getSignature());
}
客户类是:
@Size(max=30, min=3)
@NotNull
private String name;
@Max(150)
@NotNull
private String age;
public Customer() {}
public Customer(String sName, String sAge) {
name = sName;
age = sAge;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "Customer [name=" + name + ", age=" + age + "]";
}
主要方法是:
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("classpath:servlet- context.xml");
Customer cust = (Customer)context.getBean("cust");
cust.setAge("12");
cust.setName("John");
String name = cust.getName();
String age = cust.getAge();
System.out.println("Name: "+name+" Age :"+age);
}
Aspectj POM依赖项
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.4</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.7.4</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.4</version>
</dependency>
答案 0 :(得分:0)
为了让你能够通过接受答案来结束这个问题,我会在评论中重复我的回答:
你的Spring配置意味着它是data = {
'title': [{content: 'Value'}],
'content': [{content: 'Value'},{content: 'Value'}]
}
,你的方面切入点正在寻找main.com.dtos.Customer
(没有com.dtos.*
前缀)。