一、@Configuration & @Bean 註解java
@Configuration public class HelloWorldConfig { @Bean public HelloWorld helloWorld(){ return new HelloWorld(); } } ... //使用舉例 public static void main(String[] args) { ApplicationContext ctx = new AnnotationConfigApplicationContext(HelloWorldConfig.class); HelloWorld helloWorld = ctx.getBean(HelloWorld.class); helloWorld.setMessage("Hello World!"); helloWorld.getMessage(); }
public static void main(String[] args) { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(AppConfig.class, OtherConfig.class); ctx.register(AdditionalConfig.class); ctx.refresh(); MyService myService = ctx.getBean(MyService.class); myService.doStuff(); }
二、@Import
註解能夠容許從其餘配置類中加載@Bean
的定義.net
@Configuration public class ConfigA { @Bean public A a() { return new A(); } } ... @Configuration @Import(ConfigA.class) public class ConfigB { @Bean public B a() { return new A(); } }
public static void main(String[] args) { ApplicationContext ctx = new AnnotationConfigApplicationContext(ConfigB.class); // now both beans A and B will be available... A a = ctx.getBean(A.class); B b = ctx.getBean(B.class); }
三、@Bean支持指定任意的初始化和銷燬的回調方法prototype
public class Foo { public void init() { // initialization logic } public void cleanup() { // destruction logic } } @Configuration public class AppConfig { @Bean(initMethod = "init", destroyMethod = "cleanup" ) public Foo foo() { return new Foo(); } }
四、默認的scope是單例(Singleton),可是你能夠像下面這樣使用@Scope註解:code
@Configuration public class AppConfig { @Bean @Scope("prototype") public Foo foo() { return new Foo(); } }