对我们的系统的配置信息进行统一管理,一般做法是将配置信息配置与一个.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集合总结