Aop拦截到的Action 使得@Autowired 无法自动装配问题解决

@Aspect作用于action,致使action中的@Autowired注入为null的解决方案,以下三种任选一种:
1、去掉@Autowired,改用set,get注入
2、将action纳入spring的ioc管理,即:struts.xml里action的class应写成spring里对应bean的id 。只有这样spring容器才会自动的将papermanager注入
3、修改Struts.xml文件的属性<constant name="struts.objectFactory.spring.autoWire.alwaysRespect" value="true" />,使自动注入总是有效

现在配置before/after 可以拦截action的方法。service要用get/set
execution(* com.eportal.action.background..*.add*(..))
|| execution(* com.eportal.action.background..*.login(..))
|| execution(* com.eportal.action.background..*.update(..)) 
|| execution(* com.eportal.action.background..*.deleted(..))


但是如果想要结果的成功或失败,用after-returning,不能拦截得到返回值。因为普通的login,add,update,delete都是void方法,如果改为有返回值的,则struts2无法返回匹配到页面。
如果将原先的add方法,拆为两个方法。
/**
     * 角色新增保存
     * @throws IOException 
     */
    public void add() throws IOException {
        result = addMethod();
        responseBody(result);
    }
    
    /**
     * 角色新增保存方法
     * @throws IOException 
     */
    @LogAnnotation(operateDescribe="角色新增")  
    public Map<String, Object> addMethod() throws IOException{
        String msg = ValidateUtil.validate(getModel());
        Sysroles role = getModel();
        if (msg == null || msg.trim().length() == 0) {
            
        } else {
            result.put("code", 0);
            result.put("msg", msg);
        }
        return result;
    }

add接受addMethod的返回值,并printWrite。AOP只能拦截到add(),不能拦截到addMethod()。怎么改配置文件都不行,如改为拦截 .deletedMethod*(..) 或者.*Method(..)


将addMethod()放到service,AOP配置改为execution(* com.eportal.service..*.*Method(..))。可以达到想要的结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值