Spring中的AOP功能

小伙真帅 2017-12-27 06:17:53
Spring中需要向View层传递参数时,需要频繁在方法中传递Model
所以我把它写到了基类中。


@ModelAttribute
private void setReqAndResp(Model model)
{
this.model = model;
Initialize();
}


页面中,有些地方是需要统一返回固定格式的json数据,所以我又写了一个注解,利用AOP进行拦截处理。

@Pointcut("execution(* com.rbm.eds.action..*(..))"
+ "&& @annotation(com.rbm.eds.framework.core.annotation.Ajax)")
public void ajaxResponse(){}

@SuppressWarnings({ "unchecked", "rawtypes" })
@Around("ajaxResponse()")
@ResponseBody
public Object afterReturn(ProceedingJoinPoint jp)
{
BaseResponse resp = new BaseResponse();
try {
Object data = jp.proceed();
resp.setCode(1);
if(data != null && (data.toString().startsWith("{")
|| data.toString().startsWith("[")))
{

resp.setData(JSON.parse(data.toString()));
} else
resp.setData(data);
resp.setMessage("请求成功");
} catch(ServiceException ex)
{
resp.setCode(980);
resp.setMessage(ex.getMessage());
}
catch (Throwable e) {
resp.setCode(900);
resp.setMessage("系统错误!请联系管理员");
e.printStackTrace();
logger.error("系统错误", e);
}
return JSON.toJSONString(resp);
}


现在的问题是,只要我在controller中的某一个方法上打了 @Ajax 注解,则整个controller中的所有action都无法自动注入Model.
我想问一下这个是执行顺序的问题? 还是写法有问题?

或者说有什么其它的解决方案么?
...全文
328 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
maradona1984 2018-01-04
  • 打赏
  • 举报
回复
引用 6 楼 ccppvv 的回复:
[quote=引用 4 楼 maradona1984 的回复:] 页面中,有些地方是需要统一返回固定格式的json数据,所以我又写了一个注解,利用AOP进行拦截处理。 springmvc中有更优雅的实现,如果你用fastjson,那就继承com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter这个类,然后写你这段代码

	<mvc:annotation-driven enable-matrix-variables="true">
		<mvc:message-converters>
			<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"></bean>
		</mvc:message-converters>
	</mvc:annotation-driven>
虽然没有正面解决你的问题,但用这种方式或许能侧面解决
这种方式,必须在每个Action外层再套一层,就失去了AOP的意义了。[/quote] 并没有套一层,这个只是对@RequestBody @ResponseBody注解的方法的进行序列化的接口的实现类罢了 我只是表示这个地方不需要用AOP,因为springMVC已经提供接口,你只需要实现接口并注入,你可以再了解下
小伙真帅 2018-01-04
  • 打赏
  • 举报
回复
引用 4 楼 maradona1984 的回复:
页面中,有些地方是需要统一返回固定格式的json数据,所以我又写了一个注解,利用AOP进行拦截处理。 springmvc中有更优雅的实现,如果你用fastjson,那就继承com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter这个类,然后写你这段代码

	<mvc:annotation-driven enable-matrix-variables="true">
		<mvc:message-converters>
			<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"></bean>
		</mvc:message-converters>
	</mvc:annotation-driven>
虽然没有正面解决你的问题,但用这种方式或许能侧面解决
这种方式,必须在每个Action外层再套一层,就失去了AOP的意义了。
小伙真帅 2018-01-04
  • 打赏
  • 举报
回复
引用 3 楼 qq_35670001 的回复:
试试使用@After注解
After无法获取返值吧?
丄whistle 2017-12-28
  • 打赏
  • 举报
回复
试试使用@After注解
maradona1984 2017-12-28
  • 打赏
  • 举报
回复
页面中,有些地方是需要统一返回固定格式的json数据,所以我又写了一个注解,利用AOP进行拦截处理。 springmvc中有更优雅的实现,如果你用fastjson,那就继承com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter这个类,然后写你这段代码

	<mvc:annotation-driven enable-matrix-variables="true">
		<mvc:message-converters>
			<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"></bean>
		</mvc:message-converters>
	</mvc:annotation-driven>
虽然没有正面解决你的问题,但用这种方式或许能侧面解决
TrueZq 2017-12-27
  • 打赏
  • 举报
回复
不好意思,贴错了
TrueZq 2017-12-27
  • 打赏
  • 举报
回复
https://192.89.30.128:18008/security-sso/login?_language=zh_CN&service=https%3A%2F%2F192.89.30.128%3A18008%2Fcontroller%2Fv2%2Fsso%2Fredirector%3Fto%3Dhttps%253A%252F%252F192.89.30.128%253A18008%252FcampusWebC10%252FcampusIndex.html%253FcurMenuId%253Dac.cloud.homepage%2526_language%253Dzh_CN

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧