Guice 学习(七)常量和属性的注入( Constant and Property Inject)

时间:2023-12-05 09:54:32

1、常量注入方式

package com.guice.ConstantInjectDemo;

import com.google.inject.Binder;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Module;
import com.google.inject.name.Named;
import com.google.inject.name.Names; /*
* 绑定常量
*/
public class ConstantInjectDemo {
@Inject
@Named("a")
private int a; public static void main(String[] args) {
ConstantInjectDemo instance = Guice.createInjector(new Module() { @Override
public void configure(Binder binder) {
// 将数值22绑定到常量值a上
binder.bindConstant().annotatedWith(Names.named("a")).to(22); }
}).getInstance(ConstantInjectDemo.class);
System.out.println(instance.a);// 22
}
}

除了能够绑定int外。在ConstantBindingBuilder类中还能够绑定其他的基本类型。

com.google.inject.binder.ConstantBindingBuilder.to(String)

com.google.inject.binder.ConstantBindingBuilder.to(long)

com.google.inject.binder.ConstantBindingBuilder.to(boolean)

com.google.inject.binder.ConstantBindingBuilder.to(double)

com.google.inject.binder.ConstantBindingBuilder.to(float)

com.google.inject.binder.ConstantBindingBuilder.to(short)

com.google.inject.binder.ConstantBindingBuilder.to(char)

2、属性注入方式

package com.guice.ConstantInjectDemo;

import java.util.Properties;

import com.google.inject.Binder;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Module;
import com.google.inject.name.Named;
import com.google.inject.name.Names; /**
* TODO : 绑定Properties 除了能够绑定基本类型外。还能够绑定一个Properties到Guice中。当然了,因为Properties本质上时一个Map<String,String>, 因此Guice也同意绑定一个Map<String,String>。
*
* @author E468380
*/
public class PropertiesInjectDemo {
@Inject
@Named("csdn")
private String csdn; public static void main(String[] args) {
PropertiesInjectDemo instance = Guice.createInjector(new Module() { @Override
public void configure(Binder binder) {
Properties properties = new Properties();
properties.setProperty("csdn", "www.csdn.com");
Names.bindProperties(binder, properties);
}
}).getInstance(PropertiesInjectDemo.class);
System.out.println(instance.csdn);
}
}