<commit_before>#title: 工厂方法
#author:wendal(<EMAIL>)
#index:0,1
--------------------------------------------------------------------------------------------------------
什么是工厂方法?

	工厂方法,就是通过一个"虚拟"构造方法,供调用者获取特定的实例. 至于返回的是什么实例, 得看环境和传入的参数,及
	方法内的业务逻辑了.
	
	例如, 希望在生产环境用Product目录下的配置文件,开发环境用dev目录下的配置文件

--------------------------------------------------------------------------------------------------------
使用Iocbean的factory
	
	通过IocBean注解内的factory参数,可以自定义工厂类及工厂method
	
	factory参数的规则是, 以井号分隔,井号之前的是类名或ioc bean名称, 后面是方法名称.

	{{{<Java>
	@IocBean(factory="net.wendal.mqtt.MqttAbcServiceFactory#create", args={"refer:dao"})
	public class AbcService extends Service {
		...
		
	}
	
	// 无任何注解
	public class MqttAbcServiceFactory {
		public static AbcService create(Dao dao) {
			return new XXXXAbcService(dao);
		}
	}
	}}}
	
	通过其他bean生成此bean, 区别就是用`$对象名称` 代替 上一个例子的类名
	
	{{{<Java>
	@IocBean(factory="$snakerConfigure#build")
	public class SnakerService{}
	
	
	@IocBean(name="snakerConfigure")
	public class SnakerConfigure {
		public SnakerService build() {
			return ....;
		}
	}
	}}}
	
--------------------------------------------------------------------------------------------------------
使用IocBean实例方法
	
	先看示例. 这个功能是1.r.62新增.
	
	相比@IocBean的factory参数, 这种方式是声明"其他"bean的生成, 而不是自身.
	
	{{{<JAVA>
@IocBean // 首先,它自己必须加@IocBean, 可以使用@IocBean/@Inject的全部功能.
public class MyBeanFactory {

    //@Inject
    //public PropertiesProxy conf; // 像普通对象那么注入任何你需要的东西,这个conf也可是其他IocBean类,但不能是这个类了,否则死循环了
    @IocBean
    public PropertiesProxy getPropertiesProxy() {
        if ("product".equals(System.getProperty("nutz.runmode"))) {<commit_msg>fix: ioc工厂方法文档里面的描述有点问题,修正一下<commit_after>#title: 工厂方法
#author:wendal(<EMAIL>)
#index:0,1
--------------------------------------------------------------------------------------------------------
什么是工厂方法?

	工厂方法,就是通过一个"虚拟"构造方法,供调用者获取特定的实例. 至于返回的是什么实例, 得看环境和传入的参数,及
	方法内的业务逻辑了.
	
	例如, 希望在生产环境用Product目录下的配置文件,开发环境用dev目录下的配置文件

--------------------------------------------------------------------------------------------------------
使用Iocbean的factory
	
	通过IocBean注解内的factory参数,可以自定义工厂类及工厂method
	
	factory参数的规则是, 以井号分隔,井号之前的是类名或ioc bean名称, 后面是方法名称.

	{{{<Java>
	@IocBean(factory="net.wendal.mqtt.MqttAbcServiceFactory#create", args={"refer:dao"})
	public class AbcService extends Service {
		...
		
	}
	
	// 无任何注解
	public class MqttAbcServiceFactory {
		public static AbcService create(Dao dao) {
			return new XXXXAbcService(dao);
		}
	}
	}}}
	
	通过其他bean生成此bean, 区别就是用`$对象名称` 代替 上一个例子的类名
	
	{{{<Java>
	@IocBean(factory="$snakerConfigure#build")
	public class SnakerService{}
	
	
	@IocBean(name="snakerConfigure")
	public class SnakerConfigure {
		public SnakerService build() {
			return ....;
		}
	}
	}}}
	
--------------------------------------------------------------------------------------------------------
使用IocBean实例方法
	
	先看示例. 这个功能是1.r.62新增.
	
	相比@IocBean的factory参数, 这种方式是声明"其他"bean的生成, 而不是自身.
	
	{{{<JAVA>
@IocBean // 首先,它自己必须加@IocBean, 可以使用@IocBean/@Inject的全部功能.
public class MyBeanFactory {

    //@Inject
    //public PropertiesProxy conf; // 像普通对象那么注入任何你需要的东西,这个conf也可是其他IocBean类,但不能是这个类了,否则死循环了
    @IocBean
    public PropertiesProxy getConf() {
        if ("product".equals(System.getProperty("nutz.runmode"))) {
{'fraction_non_alphanumeric': 0.29415384615384615, 'fraction_numerical': 0.003076923076923077, 'mean_word_length': 2.0046210720887245, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 11, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7033636', 'n_tokens_mistral': 1463, 'n_tokens_neox': 1485, 'n_words': 157}