/*
* Copyright 2008-2009 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.hasor.core.binder;
import net.hasor.core.BindInfo;
import net.hasor.core.Provider;
import net.hasor.core.Scope;
/**
* Bean配置接口,用于对Bean信息进行全方面配置。
* @version : 2014年7月2日
* @author 赵永春(zyc@hasor.net)
*/
public interface BindInfoBuilder<T> {
/**
* 为绑定设置ID。
* @param newID newID
*/
public void setBindID(String newID);
/**
* 为类型绑定一个名称。
* @param bindName 名称
*/
public void setBindName(String bindName);
/**
* 为类型绑定一个实现,当获取类型实例时其实获取的是实现对象。
* @param sourceType 实现类
*/
public void setSourceType(Class<? extends T> sourceType);
/**
* 设置元信息。
* @param key metaData key
* @param value metaData value
*/
public void setMetaData(String key, Object value);
/**
* 标记是否为单例。
* @param singleton true - 表示单例,false - 表示非单例。
*/
public void setSingleton(boolean singleton);
/**
* 开发者自定义的{@link Provider}。
* @param customerProvider 设置自定义{@link Provider}
*/
public void setCustomerProvider(Provider<? extends T> customerProvider);
/**
* 将类型发布到一个固定的命名空间内。
* @param scopeProvider 命名空间
*/
public void setScopeProvider(Provider<Scope> scopeProvider);
//
/**
* 设置构造参数。
* @param index 参数索引
* @param paramType 参数类型
* @param valueProvider 参数值
*/
public void setConstructor(int index, Class<?> paramType, Provider<?> valueProvider);
/**
* 设置构造参数。
* @param index 参数索引
* @param paramType 参数类型
* @param valueInfo 参数值
*/
public void setConstructor(int index, Class<?> paramType, BindInfo<?> valueInfo);
/**
* 添加依赖注入。
* @param property 属性名
* @param valueProvider 属性值
*/
public void addInject(String property, Provider<?> valueProvider);
/**
* 添加依赖注入。
* @param property 属性名
* @param valueInfo 属性值
*/
public void addInject(String property, BindInfo<?> valueInfo);
//
/**
* 转化为{@link BindInfo}类型对象。
* @return 返回{@link BindInfo}类型对象。
*/
public BindInfo<T> toInfo();
/**
* 设置初始化方法,一个无参的方法。例如:public void init(){ ... }。
* @param methodName 方法名。
*/
public void initMethod(String methodName);
}