一、@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(); } }