`
jimmy9495
  • 浏览: 300632 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

父类bean无法注入问题

阅读更多
package com.alifi.hades.biz.access.rule.ctu;

import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.alifi.hades.biz.access.rule.AccessRule;
import com.alifi.hades.biz.crm.manager.CrmMemberManager;
import com.alifi.hades.common.model.CustListDO;
import com.alifi.hades.dal.dao.CustListDao;
import com.alifi.hyperion.common.model.Member;

/**
 * 黑名单准入规则
 *
 */
public abstract class AbstractCTUAccessRule implements AccessRule {
    private static final Log logger = LogFactory.getLog(AbstractCTUAccessRule.class);
    protected static final String KEY_MEMBER = "member";
    
    private CrmMemberManager crmMemberManager;
    private CustListDao       custListDao;


    public boolean checkAccess(String prodId, Map<String, Object> context) {
        if (context.containsKey(KEY_MEMBER)) {
            Member member = (Member) context.get(KEY_MEMBER);
            String site = crmMemberManager.getSiteBySource(member.getSource());
            String siteMemId = member.getUserId();
            String ruleCode = getAccessRuleCode();
            // 白名单
            CustListDO whiteList = custListDao.getWhiteListByRuleCode(site, siteMemId, ruleCode);
            if (whiteList != null) {
                logger.info("该规则的白名单用户,跳过此规则校验。ruleCode:" + ruleCode + "    siteMemId:" + siteMemId);
                return true;
            }
            return doCheckAccess(prodId, member);
        }
        return false;
    }


    protected abstract boolean doCheckAccess(String prodId, Member member);


    public void setCustListDao(CustListDao custListDao) {
        this.custListDao = custListDao;
    }


    public void setCrmMemberManager(CrmMemberManager crmMemberManager) {
        this.crmMemberManager = crmMemberManager;
    }

}





/*
 * Project: Hades
 * 
 * File Created at 2011-03-15
 * $Id$
 * 
 * Copyright 2011 B2B Technology, Alibaba.com Corporation Limited.
 * All rights reserved.
 *
 * This software is the confidential and proprietary information of
 * Alibaba Company. ("Confidential Information").  You shall not
 * disclose such Confidential Information and shall use it only in
 * accordance with the terms of the license agreement you entered into
 * with Alibaba.com.
 */

package com.alifi.hades.biz.access.rule.ctu;

import static com.alifi.hades.biz.common.util.TemplatedLog.log;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.alifi.ctu.service.BlackListService;
import com.alifi.hades.biz.common.dictionary.MsgTemplateDictionary.DataError;
import com.alifi.hades.biz.common.dictionary.MsgTemplateDictionary.RpcCallError;
import com.alifi.hades.biz.common.exception.LoanLogMsg;
import com.alifi.hades.biz.crm.manager.CrmMemberManager;
import com.alifi.hyperion.common.model.Member;

/**
 * 黑名单不准入
 *
 */
public class BlackListAccessRule extends AbstractCTUAccessRule {

    private static final Log logger = LogFactory.getLog(BlackListAccessRule.class);
    
    private CrmMemberManager crmMemberManager;
    
    private BlackListService blackListService;
    
    @Override
    /**
     * 黑名单不准入
     */
    protected boolean doCheckAccess(String prodId, Member member) {
        String site = crmMemberManager.getSiteBySource(member.getSource());
        String siteMemId = member.getUserId();
        try {
            if(blackListService.checkBlackListBySiteMemeber(site, siteMemId, prodId, "1")){
                logger.debug(log(DataError.UNEXPECTED, "黑名单用户不准入。siteMemId:" + siteMemId));
                return false;
            }else{
                return true;
            }
        } catch (Exception e) {
            logger.error(log(RpcCallError.MSG_00001, LoanLogMsg.BLACKLIST_EXCEPTION), e);
            return false;
        }
    }
    
    public String getAccessRuleCode() {
        return "2000";
    }

    
    public void setCrmMemberManager(CrmMemberManager crmMemberManager) {
        this.crmMemberManager = crmMemberManager;
        super.setCrmMemberManager(crmMemberManager);//处理父类无法注入问题
    }

    public void setBlackListService(BlackListService blackListService) {
        this.blackListService = blackListService;
    }
}

分享到:
评论

相关推荐

    如何正确使用 @Qualifier 注解来解决多个同类型 Bean 注入的问题

    Spring 容器中存在多个同一接口或父类的实现时,如果不明确指定要注入哪个实现,Spring 就会抛出 "Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @...

    Spring使用@Autowired为抽象父类注入依赖代码实例

    Spring框架中,使用@Autowired注解可以将依赖项注入到Bean中,但是当我们需要将依赖项注入到抽象父类时,会遇到一些问题。如果我们直接使用@Autowired注解在抽象父类中,可能不会生效,因为抽象父类不能被实例化。...

    Bean Validation 规范文档

    为了更好地与现代Java框架集成,如Spring,Bean Validation提供了与上下文和依赖注入机制的深度集成。 #### 2.5 组别转换 组别转换机制允许在不同场景下动态切换验证规则,增强了验证的灵活性。 #### 2.6 消息...

    spring注解注入示例详解.pdf

    @Autowired是Spring提供的注解,它可以实现自动装配,开发者可以通过此注解自动注入Bean的依赖。Autowired注解可以用在成员变量、setter方法以及构造函数上。当Spring容器启动时,它会自动查找并注入匹配的Bean。 @...

    Spring3.0注解注入详解[总结].pdf

    例如,当需要注入父类中定义的属性,但无法重写父类的属性或setter方法时,可以使用@PostConstruct注解的方法来完成初始化。 总结来说,Spring 3.0的注解注入提供了强大的依赖注入能力,简化了XML配置,提高了代码...

    spring注解注入示例详解[文].pdf

    - 示例中,如果一个子类需要注入父类中的属性,而不能覆盖父类的setter方法,可以使用`@PostConstruct`来注入`SessionFactory`。 总的来说,这些注解在Spring框架中起着至关重要的作用,它们允许开发者更灵活地...

    第七章 Spring4 继承、依赖、引用

    在Spring中,我们可以定义Bean的继承关系,使得子类Bean可以继承父类Bean的配置属性。这在处理具有相似属性或行为的Bean时非常有用。例如,你可以定义一个基础的DAO Bean配置,然后让具体的DAO Bean继承它,从而...

    EJB依赖注入的原理

    在EJB3.0中,依赖注入主要通过容器来实现,使得bean不再需要手动查找和管理依赖。 依赖注入的基本概念是,当一个对象(调用者)需要另一个对象(被调用者)协助时,不再由调用者直接创建被调用者的实例,而是由外部...

    处理ssh组合框架中如何用getBean获取实体

    这样可以在任何地方通过这个工具类获取bean,而不需要依赖特定的父类或实现。 ```java public class SpringContextUtil { private static ApplicationContext context; static { context = new ...

    详解Spring Bean 之间的特殊关系

    在Spring框架中,Bean之间的关系不仅限于简单的依赖注入(DI)。本文将深入探讨Spring Bean之间的特殊关系,包括继承、前置依赖以及引用。 1. **继承** 在面向对象编程中,继承允许子类共享父类的属性和方法,以...

    二、Spring源码分析——BeanFactory

    5. **更多的bean定义元数据支持**,例如,它可以处理更复杂的bean定义,如bean的父类、自动代理等。 四、BeanFactory的实现 Spring框架提供了多种BeanFactory实现,如XmlBeanFactory、DefaultListableBeanFactory等...

    spring注解笔记

    当使用@Resource或@Autowired注解注入Spring管理的Bean时,需要注意注入变量的类型必须与要注入的Bean类型或其父类类型匹配。否则,Spring将无法完成注入过程,因为类型不一致会导致注入失败。 总结来说,Spring...

    00000025_beandefine的用法.rar

    9. Bean的父类定义(Parent Bean Definition):允许继承另一个BeanDefinition的属性。 二、BeanDefinition的注册与加载 在Spring容器启动时,会通过BeanDefinitionReader读取XML配置文件或通过...

    Spring XmlBeanFactory 容器的基本实现.doc

    `DefaultListableBeanFactory` 是 Spring 容器的核心,它负责管理 Bean 的生命周期,包括 Bean 的创建、初始化、依赖注入以及销毁等过程。   3. 配置文件加载 `XmlBeanFactory` 在初始化过程中,会使用 `...

    spring ioc使用教程

    Bean可以通过设置`abstract="true"`变为抽象Bean,它不能直接实例化,但可以作为其他Bean的父类。 8. **依赖实验**: 一个Bean可能依赖于其他Bean,Spring会自动处理这些依赖关系,确保在需要时能正确注入。 9. ...

    spring02-3

    当我们创建一个`abstract="true"`的bean定义时,Spring容器不会尝试创建该bean,而是将其作为其他bean的父类,让子bean继承其属性和配置。这在我们需要定义一组有共同配置的bean时非常有用,而具体实现则由子bean...

    Spring IOC原理补充说明(循环依赖、Bean作用域等)

    1. **构造器注入的循环依赖**:Spring无法解决,因为构造器参数必须在实例化时就提供,如果此时依赖的对象还未创建,就会导致无法实例化。 2. **属性注入(setter方法)的循环依赖**:Spring可以在Bean实例化后,但...

    spring

    通过设置父类bean为抽象类型(abstract="true"),并在子bean中引用父bean,可以轻松实现配置的重用和简化。 **6. 通过ApplicationContext装配bean** 使用ApplicationContext装配bean而不是在XML配置中直接预装配...

    Spring.html

    基于父类:代理对象与目标对象是父子关系.目标不能被final修饰 修改默认代理方法: 增强种类 前置通知 后置通知 异常通知 最终通知 环绕通知 注意:使用注解的方式,最终通知和后置通知顺序换了,建议...

    ssh注意事项

    Spring中的Bean注入与配置 在Spring框架中,Bean的注入是其核心特性之一。例如,在`LoginAction`类中,开发者需正确声明和注入`UserDAO`接口的实现类。这通常通过在类内部声明私有成员变量,并提供相应的get/set...

Global site tag (gtag.js) - Google Analytics