属性工厂

对我们的系统的配置信息进行统一管理,一般做法是将配置信息配置与一个.properties的文件中,然后在我们系统初始化的时候,系统自动读取.properties配置文件中的key value(键值对),然后对我们系统进行定制的初始化。

 用Properties集合加载的时候,我们都需要手工的去读取这个配置文件,往往我们会自己创建一个类来专门读取,并储存这些配置信息。

articleDao=edu.edu.impl.AddArticleImpl
channelDao=edu.edu.impl.AddChannelImpl

构造一个读取方法 

​
public class PropertyBeanFactory implements BeanFactory{
    public static Map<String, Object> mpa = new HashMap<String, Object>();
	public PropertyBeanFactory(){
		Properties pro = new Properties(); //集合
		try {
			pro.load(this.getClass().getClassLoader().getResourceAsStream("dao.properties"));
			Set<Entry<Object, Object>> set = pro.entrySet();
			Iterator<Entry<Object, Object>> its = set.iterator();
			while(its.hasNext()){
				Entry<Object, Object> i = its.next();
				String key = (String) i.getKey();
				String value = (String) i.getValue();
				Object o = Class.forName(value).newInstance();
				mpa.put(key, o);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	@Override
	public Object getBean(String key) {
		// TODO Auto-generated method stub
		Object o = mpa.get(key);
		if(o==null){
			throw new RuntimeException("没有值");
		}
		return o;
		
	}
    
}

​

专门读取(注意属性名)函数依赖

public class BaseServlet extends HttpServlet {

	@Override
	public void service(ServletRequest request, ServletResponse response)
			throws ServletException, IOException {
         
		try {
			Method[] meth = this.getClass().getMethods();
			for(Method m:meth){
				String mname = m.getName();
				if(mname.startsWith("set")){
					String propName = mname.substring(3);//取到属性名,但是第一个字母大写,改成小写
					StringBuffer sb = new StringBuffer(propName);
					propName = sb.replace(0, 1, mname.toLowerCase().substring(3,4)).toString();
					Object dao = BeanFactoryUtil.getBean(propName);
					m.invoke(this, dao); //等于调用子类的set方法注入对象
				}
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		super.service(request, response);
	}
    
}

最后在Servlet类中调用

public class AddServlet extends BaseServlet {
     
	public ArticleDao articleDao = null;
	public void setArticleDao(ArticleDao articleDao) {
		this.articleDao = articleDao;
	}


	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
         doPost(request, response);
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String title = request.getParameter("title");
		String source = request.getParameter("source");
		String keyWord = request.getParameter("keyWord");
		String content = request.getParameter("content");
		
		Article a = new Article();
		a.setTitle(title);
		a.setAsource(source);
		a.setKeyword(keyWord);
		a.setContent(content);
	 
		//ArticleDao articleDao = (ArticleDao) BeanFactoryUtil.getBean("articleDao");
		articleDao.addArticle(a);
		
		request.getRequestDispatcher("/backend/article/add_article_success.jsp").forward(request, response);
	}

}

注意:变量名定义相同(固定的key,可以更换value)

 

这块有Map集合,可参考我前面的Map集合总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值