spring使用注解通過子類注入父類的私有變量


方法一

通過 super.setBaseDao方法設置父類私有變量

父類

public class BaseServiceImpl {
    private BaseDao baseDao;

    public BaseDao getBaseDao() {
        return baseDao;
    }

    public void setBaseDao(BaseDao baseDao) {
        this.baseDao = baseDao;
    }

    public void test(){
        System.out.println("TsetService...... ");
        baseDao.test();
    }
}

 

子類

@Service("testServiceImpl")
public class TestServiceImpl extends BaseServiceImpl{
    

    @Resource(name="testDao")
    public void initBaseDao(TestDao testDao) {
        super.setBaseDao(testDao);
    }
        
}

 

方法二

@PostConstruct是Java EE 5引入的注解,Spring允許開發者在受管Bean中使用它。當DI容器實例化當前受管Bean時,@PostConstruct注解的方法會被自動觸發,從而完成一些初始化工作

父類同上

子類

@Service("testServiceImpl")
public class TestServiceImpl extends BaseServiceImpl{
    
    private TestDao testDao;
    
    
    public TestDao getTestDao() {
        return testDao;
    }

    @Resource(name="testDao")
    public void setTestDao(TestDao testDao) {
        this.testDao = testDao;
    }


    @PostConstruct
    public void initBaseDao(TestDao testDao) {
        super.setBaseDao(testDao);
    }
        
}

 

方法三

父類被注入對象非私有,子類重寫setter方法注入到父類變量

父類

public class BaseServiceImpl {
    protected BaseDao baseDao;

    public BaseDao getBaseDao() {
        return baseDao;
    }

    public void setBaseDao(BaseDao baseDao) {
        this.baseDao = baseDao;
    }

    public void test(){
        System.out.println("TsetService...... ");
        baseDao.test();
    }
}

子類

@Service("testServiceImpl")
public class TestServiceImpl extends BaseServiceImpl{

    @Resource(name="testDao")
    public void setBaseDao(BaseDao baseDao) {
        this.baseDao = baseDao;
    }
 
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM