抽象类属性注入实现

由于抽象类不能实例化,所以在spring中就不能在xml配置文件中把值注入到抽象类中,比如我有个抽象类AbstractHtmlParser,而这个抽象类又有多个具体实现类BaiduHtmlParser、GoogleHtmlParser,这些具体实现类又都需要注入一些相同的实例,如果每个实现类都要去声明和注入一些相同的属性则显得太麻烦。这个时候我们可以使用spring的注解方式,在抽象类中把属性声明为protected并使用注解方式定义bean:
package com.haochen.parser;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import com.haochen.dao.IHibernateDao;

public abstract class AbstractHtmlParser {
	@Autowired
	protected IHibernateDao hibernateDao;

	public void setHibernateDao(IHibernateDao hibernateDao) {
		this.hibernateDao = hibernateDao;
	}

	public abstract List<String> parse();
}


这样,就可以直接在实现类使用hibernateDao属性了:
package com.haochen.parser;

import java.util.List;

import org.springframework.stereotype.Service;

@Service("googleHtmlParser")
public class GoogleHtmlParser extends AbstractHtmlParser {

	@Override
	public List<String> parse() {
		hibernateDao.save(new Object());
		return null;
	}

}


HibernateDao.java
package com.haochen.dao;

import org.springframework.stereotype.Repository;

@Repository("hibernateDao")
public class HibernateDaoImpl implements IHibernateDao {

	@Override
	public void save(Object obj) {

	}

}

这儿只是为了演示,没有写具体实现过程。

猜你喜欢

转载自arthur2014.iteye.com/blog/2164953
今日推荐