Guice
(from Google Bob Lee's IoC)
Dependency Injection, DI
Inversion of Control, IoC
It's another IoC container, which like a cousin of Spring IoC.
[list][*]Spring uses xml, provide IoC, Aop and peripheral service;[*]Guice uses Annotatin, each has their strongpoint, it's hard to say which one is better[/list]
Just use them in proper place !
Usage 1:
[code]
//1)
public interface MyService {
void myMethod();
}
//2)
public class MyServiceImpl implements MyService {
public void myMethod() {
System.out.println("Hello, World!");
}
}
//3) Add annotation of "@Inject"
public class Client {
//If define @Inject for this field, the set method isn't required
MyService service;
@Inject
void setService(MyService service) {
this.service = service;
}
public void myMethod() {
service.myMethod();
}
}
//4) Like Spring's beans.xml
public class MyModule implements Module {
public void configure(Binder binder) {
binder.bind(MyService.class).to(MyServiceImpl.class).in(Scopes.SINGLETON);
}
}
//5)
public class Test {
public static void main(String[] args) {
//IoC Container, the heart of the Guice framework
Injector injector = Guice.createInjector(new MyModule());
Client client = injector.getInstance(Client.class);
client.myMethod();
}
}
[/code]
Usage 2:
[code]
//1)
@ImplementedBy(MyServiceImpl.class)
public interface MyService {
void myMethod();
}
//2)
public class MyServiceImpl implements MyService {
public void myMethod() {
System.out.println("Hello, World!");
}
}
//3)
public class Client {
@Inject
private MyService service;
public void myMethod() {
service.myMethod();
}
}
//4)
public class MyModule implements Module {
public void configure(Binder binder) {}
}
//5) Test
[/code]
Note: Some code snippet are from Robbin's Blog.
(from Google Bob Lee's IoC)
Dependency Injection, DI
Inversion of Control, IoC
It's another IoC container, which like a cousin of Spring IoC.
[list][*]Spring uses xml, provide IoC, Aop and peripheral service;[*]Guice uses Annotatin, each has their strongpoint, it's hard to say which one is better[/list]
Just use them in proper place !
Usage 1:
[code]
//1)
public interface MyService {
void myMethod();
}
//2)
public class MyServiceImpl implements MyService {
public void myMethod() {
System.out.println("Hello, World!");
}
}
//3) Add annotation of "@Inject"
public class Client {
//If define @Inject for this field, the set method isn't required
MyService service;
@Inject
void setService(MyService service) {
this.service = service;
}
public void myMethod() {
service.myMethod();
}
}
//4) Like Spring's beans.xml
public class MyModule implements Module {
public void configure(Binder binder) {
binder.bind(MyService.class).to(MyServiceImpl.class).in(Scopes.SINGLETON);
}
}
//5)
public class Test {
public static void main(String[] args) {
//IoC Container, the heart of the Guice framework
Injector injector = Guice.createInjector(new MyModule());
Client client = injector.getInstance(Client.class);
client.myMethod();
}
}
[/code]
Usage 2:
[code]
//1)
@ImplementedBy(MyServiceImpl.class)
public interface MyService {
void myMethod();
}
//2)
public class MyServiceImpl implements MyService {
public void myMethod() {
System.out.println("Hello, World!");
}
}
//3)
public class Client {
@Inject
private MyService service;
public void myMethod() {
service.myMethod();
}
}
//4)
public class MyModule implements Module {
public void configure(Binder binder) {}
}
//5) Test
[/code]
Note: Some code snippet are from Robbin's Blog.