最近在學習了springboot,但是遇到了這樣一個問題,我搭建完架構后,想加上一個請求日志列印和回應日志列印,這無疑就用到了spring的AOP機制了,但是我配置完了之后,確是沒有生效。我也百度了,但是看配置都和我差不多,但是我的卻不生效,這令我百思不得其解,希望大家幫我看看。我的代碼如下:
/**
* 這配置AOP的代碼
*/
@Aspect
@Component
public class HttpAspect{
private Logger logger = LoggerFactory.getLogger(HttpAspect.class);
public HttpAspect(){
logger.info("=============初始化AOP===============");
}
@Pointcut("execution(public * com.springboot.mybatis.controller.*.*(..))")
public void log(){
}
/**
*
* 獲取請求的資訊
*/
@Before("log()")
public void doBefore(JoinPoint joinPoint){
ServletRequestAttributes arrt = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = arrt.getRequest();
logger.info("請求地址 url:{}",request.getRequestURL());
logger.info("請求方式 :{}",request.getMethod());
logger.info("請求者ip地址:{}",request.getRemoteAddr());
logger.info("訪問的類與方法:{}",joinPoint.getSignature().getDeclaringTypeName()+"."
+joinPoint.getSignature().getName());
logger.info("請求引數:{}",joinPoint.getArgs());
}
/**
* 獲取回應的資訊
* @param object
*/
@AfterReturning(returning = "object", argNames = "object", pointcut = "log()")
public void doAfterReturning(Object object){
logger.info("回應資訊如下:");
logger.info("response:{}",object.toString());
}
}
/**
* 這是啟動應用的代碼
*/
@SpringBootApplication(scanBasePackages = "com")
@MapperScan(basePackages = "com.springboot.mybatis.dao")
public class SpringbootMybatisApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMybatisApplication.class, args);
}
}
#這是我的組態檔
server:
port: 8080
context-path: /sbm
spring:
profiles:
active: dev
#資料庫配置
datasource:
url: jdbc:mysql://localhost:3306/testaclec?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
#頁面跳轉配置
mvc:
view:
prefix: /view/
suffix: .html
#mybatis 配置
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.springboot.mybatis.model
#分頁插件配置
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
logging:
config: classpath:logback-spring.xml
uj5u.com熱心網友回復:
不要沉啊!有沒有高手解答啊!uj5u.com熱心網友回復:
好吧!沉了。不知道能不能頂上去。
uj5u.com熱心網友回復:
你這個可能運行Spring boot 的@SpringBootApplicatioin里的@ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) 他是不會定義你自己的掃描包的,應該把你的你的@SpringBootApplicatioin運行的類放在上層的 例如:com.kkk.clm 放在 com.kkk里面就能掃描到了
uj5u.com熱心網友回復:
@會飛的fish 你的意思是改成@SpringBootApplication(scanBasePackages = "com.springboot.mybatis") 這樣的了,試了不行哦!uj5u.com熱心網友回復:
不是改那個,那個自定義包,他是不會去掃描的/**
* 這是啟動應用的代碼
*/
@SpringBootApplication(scanBasePackages = "com")
@MapperScan(basePackages = "com.springboot.mybatis.dao")
public class SpringbootMybatisApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMybatisApplication.class, args);
}
}
@SpringBootApplication這個注解不會掃描自定義包的,無論你寫很多包名都是不行的,@MapperScan(basePackages = "com.springboot.mybatis.dao")這個注解在這面不起作用的直接去掉,直接把這個類移到com目錄下,就可以了
uj5u.com熱心網友回復:
還有沒有大神有不同的見解的,求指教。uj5u.com熱心網友回復:
@EnableEurekaClient@SpringBootApplication
@ComponentScan("com.xxx.*") //這里要能掃描到你注解的HttpAspect 才行
public class PheryWebApplication
{
public static void main(String[] args)
{
SpringApplication.run(PheryWebApplication.class, args);
}
}
你把你的HttpAspect類隨便注入其他類中,看是不是能注入,我的不能,我就加了掃描包,可以注入了, 注解也生效了
uj5u.com熱心網友回復:
@會飛的fish 多謝你給的靈感uj5u.com熱心網友回復:
@ComponentScan(basePackages="com.zcw")@Component//這個必不可缺,否則aop不生效
@Aspect//開啟切面Aop
//不能只使用@Component,因為只使用此注解啟動會報aop切面類注入容器失敗(我這里是這樣),
//需加上@ComponentScan(basePackages="XXX.XXX.XXX")掃描具體包才能注入成功
uj5u.com熱心網友回復:
我按照7樓的辦法,可以使用了,沒有加入basePackage.
uj5u.com熱心網友回復:
配置類或者啟動類加這個注解 @EnableAspectJAutoProxyuj5u.com熱心網友回復:
@EnableEurekaClient@SpringBootApplication
@ComponentScan("com.xxx.*") //這里要能掃描到你注解的HttpAspect 才行
public class PheryWebApplication
{
public static void main(String[] args)
{
SpringApplication.run(PheryWebApplication.class, args);
}
}
上面標紅這句話是正解!!!困擾了我好幾天的問題,終于解決了!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/231149.html
標籤:Java EE
上一篇:springcloud application.properties配置讀取不到
下一篇:錯誤:org.apache.jasper.JasperException: An exception occurred processing JSP page
