Google Guice提供Annotation Binding,可以使用注解来对依赖进行绑定并同时进行赋值。
一。@DriverClassName
package com.template.guice; import com.google.inject.BindingAnnotation; import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.*; import static java.lang.annotation.RetentionPolicy.RUNTIME; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 11-8-6 * Time: 下午3:23 */ @BindingAnnotation @Target({ METHOD, CONSTRUCTOR, FIELD }) @Retention(RUNTIME) public @interface DriverClassName { }
二。@Username
package com.template.guice; import com.google.inject.BindingAnnotation; import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.RetentionPolicy.RUNTIME; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 11-8-6 * Time: 下午3:23 */ @BindingAnnotation @Target({ METHOD, CONSTRUCTOR, FIELD }) @Retention(RUNTIME) public @interface Username { }
三。@Url
package com.template.guice; import com.google.inject.BindingAnnotation; import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.*; import static java.lang.annotation.RetentionPolicy.RUNTIME; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 11-8-6 * Time: 下午3:23 */ @BindingAnnotation @Target({ METHOD, CONSTRUCTOR, FIELD }) @Retention(RUNTIME) public @interface Url { }
四。@Password
package com.template.guice; import com.google.inject.BindingAnnotation; import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.*; import static java.lang.annotation.RetentionPolicy.RUNTIME; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 11-8-6 * Time: 下午3:23 */ @BindingAnnotation @Target({ METHOD, CONSTRUCTOR, FIELD }) @Retention(RUNTIME) public @interface Password { }
五。DBConnection
package com.template.guice; import com.google.inject.Inject; import com.google.inject.Singleton; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 11-8-6 * Time: 下午3:28 */ @Singleton public class Connection { @Inject @DriverClassName private String driverClassName; @Inject @Url private String url; @Inject @Username private String username; @Inject @Password private String password; public String driverClassName() { return driverClassName; } public String url() { return url; } public String username() { return username; } public String password() { return password; } }
六。ConnectionModule
package com.template.guice; import com.google.inject.Binder; import com.google.inject.Module; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 11-8-6 * Time: 下午3:32 */ public class ConnectionModule implements Module { @Override public void configure(Binder binder) { binder.bind(String.class).annotatedWith(DriverClassName.class).toInstance("com.mysql.jdbc.Driver"); binder.bind(String.class).annotatedWith(Url.class).toInstance("jdbc:mysql://localhost:3306/demo"); binder.bind(String.class).annotatedWith(Username.class).toInstance("root"); binder.bind(String.class).annotatedWith(Password.class).toInstance("root"); } }
七。Main
package com.template.guice; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.Module; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 11-8-6 * Time: 下午3:36 */ public class Main { public static final Logger logger = LoggerFactory.getLogger(Main.class); public static void main(String[] args) { Module module = new ConnectionModule(); Injector injector = Guice.createInjector(module); Connection instance1 = injector.getInstance(Connection.class); Connection instance2 = injector.getInstance(Connection.class); logger.info("instance1 is " + instance1); logger.info("instance2 is " + instance2); logger.info("instance1's hashcode is " + instance1.hashCode()); logger.info("instance2's hashcode is " + instance2.hashCode()); logger.info("driverClassName is " + instance1.driverClassName()); logger.info("url is " + instance1.url()); logger.info("username is " + instance1.username()); logger.info("password is " + instance1.password()); } }
八。运行结果