问题如下
今天发现aop不能在controller里面不能用,换成service能用,用junit-test也行,就是放到tomcat下面不行,我就纳闷了!!!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
package
com.tutor.normal.filter;
import
javax.annotation.Resource;
import
org.aspectj.lang.ProceedingJoinPoint;
import
org.aspectj.lang.annotation.After;
import
org.aspectj.lang.annotation.AfterReturning;
import
org.aspectj.lang.annotation.AfterThrowing;
import
org.aspectj.lang.annotation.Around;
import
org.aspectj.lang.annotation.Aspect;
import
org.aspectj.lang.annotation.Before;
import
org.aspectj.lang.annotation.Pointcut;
import
org.slf4j.Logger;
import
org.slf4j.LoggerFactory;
import
com.tutor.normal.service.ITutorUserService;
/**
*
* @author jinghao.liang
*
*/
@Aspect
public
class
TutorLoginAop {
private
static
Logger log = LoggerFactory.getLogger(TutorLoginAop.
class
);
@Resource
(name =
"tutorUserService"
)
private
ITutorUserService tutorUserService;
@Pointcut
(
"execution(* com.tutor.normal.controller..*.*(..))"
)
private
void
anyMethod() {
}
// 定义一个切入点
@Before
(
"anyMethod() && args(name)"
)
public
void
doAccessCheck(String name) {
System.out.println(name);
System.out.println(
"前置通知"
);
}
@AfterReturning
(
"anyMethod()"
)
public
void
doAfter() {
System.out.println(
"后置通知"
);
}
@After
(
"anyMethod()"
)
public
void
after() {
System.out.println(
"最终通知"
);
}
@AfterThrowing
(
"anyMethod()"
)
public
void
doAfterThrow() {
System.out.println(
"例外通知"
);
}
@Around
(
"anyMethod()"
)
public
Object doBasicProfiling(ProceedingJoinPoint pjp)
throws
Throwable {
System.out.println(
"进入环绕通知"
);
Object object = pjp.proceed();
// 执行该方法
System.out.println(
"退出方法"
);
return
object;
}
}
|
spring配置,加上这两个
1
2
3
|
<
aop:aspectj-autoproxy
proxy-target-class
=
"true"
/>
<
bean
id
=
"tutorLoginAop"
class
=
"com.tutor.normal.filter.TutorLoginAop"
/>
|
尼玛吖,明明和网上的一样吖,到底什么情况
经过一天的排查终于找到问题了,原来是spring的配置应该写到springMVC里,而不是spring里面
什么意思呢?看我web.xml的配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<
context-param
>
<
param-name
>contextConfigLocation</
param-name
>
<
param-value
>classpath*:spring/applicationContext.xml</
param-value
>
</
context-param
>
<!-- Spring MVC -->
<
servlet
>
<
servlet-name
>springMVC</
servlet-name
>
<
servlet-class
>org.springframework.web.servlet.DispatcherServlet</
servlet-class
>
<
init-param
>
<
param-name
>contextConfigLocation</
param-name
>
<
param-value
>classpath:spring/spring-servlet.xml</
param-value
>
</
init-param
>
<
load-on-startup
>1</
load-on-startup
>
</
servlet
>
<
servlet-mapping
>
<
servlet-name
>springMVC</
servlet-name
>
<
url-pattern
>/</
url-pattern
>
</
servlet-mapping
>
|
原来我把配置写到了applicationContext.xml里面当然不行啦TVT,要写到spring-servlet.xml这个里面。。。