01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: */
17: package org.apache.commons.configuration.beanutils;
18:
19: import java.util.Map;
20:
21: /**
22: * <p>
23: * Definition of an interface for declaring a bean in a configuration file.
24: * </p>
25: * <p>
26: * Commons Configurations allows to define beans (i.e. simple Java objects) in
27: * configuration files, which can be created at runtime. This is especially
28: * useful if you program against interfaces and want to define the concrete
29: * implementation class is a configuration file.
30: * </p>
31: * <p>
32: * This interface defines methods for retrieving all information about a bean
33: * that should be created from a configuration file, e.g. the bean's properties
34: * or the factory to use for creating the instance. With different
35: * implementations different "layouts" of bean declarations can be
36: * supported. For instance if an XML configuration file is used, all features of
37: * XML (e.g. attributes, nested elements) can be used to define the bean. In a
38: * properties file the declaration format is more limited. The purpose of this
39: * interface is to abstract from the concrete declaration format.
40: * </p>
41: *
42: * @since 1.3
43: * @author Oliver Heger
44: * @version $Id: BeanDeclaration.java 439648 2006-09-02 20:42:10Z oheger $
45: */
46: public interface BeanDeclaration {
47: /**
48: * Returns the name of the <code>BeanFactory</code> that should be used
49: * for creating the bean instance. This can be <b>null</b>, then a default
50: * factory will be used.
51: *
52: * @return the name of the bean factory
53: */
54: String getBeanFactoryName();
55:
56: /**
57: * Here an arbitrary object can be returned that will be passed to the bean
58: * factory. Its meaning is not further specified. The purpose of this
59: * additional parameter is to support a further configuration of the bean
60: * factory that can be placed directly at the bean declaration.
61: *
62: * @return a parameter for the bean factory
63: */
64: Object getBeanFactoryParameter();
65:
66: /**
67: * Returns the name of the bean class, from which an instance is to be
68: * created. This value must be defined unless a default class is provided
69: * for the bean creation operation.
70: *
71: * @return the name of the bean class
72: */
73: String getBeanClassName();
74:
75: /**
76: * Returns a map with properties that should be initialized on the newly
77: * created bean. The map's keys are the names of the properties; the
78: * corresponding values are the properties' values. The return value can be
79: * <b>null</b> if no properties should be set.
80: *
81: * @return a map with properties to be initialized
82: */
83: Map getBeanProperties();
84:
85: /**
86: * Returns a map with declarations for beans that should be set as
87: * properties of the newly created bean. This allows for complex
88: * initialization szenarios: a bean for a bean that contains complex
89: * properties (e.g. other beans) can have nested declarations for defining
90: * these complex properties. The returned map's key are the names of the
91: * properties to initialze. The values are <code>BeanDeclaration</code>
92: * implementations. They will be treated like this declaration (in a
93: * recursive manner), and the resulting beans are assigned to the
94: * corresponding properties.
95: *
96: * @return a map with nested bean declarations
97: */
98: Map getNestedBeanDeclarations();
99: }
|