@Configuration
1、通過配置文件注入類
@Configuration
@PropertySource("classpath:config/redis.properties")
2、注冊bean
1)@Configuration+@Bean方式注冊
public class TestBean { private String username; private String url; private String password; public void sayHello() { System.out.println("TestBean sayHello..."); } public String toString() { return "username:" + this.username + ",url:" + this.url + ",password:" + this.password; } public void start() { System.out.println("TestBean 初始化。。。"); } public void cleanUp() { System.out.println("TestBean 銷毀。。。"); } }
@Configuration public class TestConfiguration { public TestConfiguration() { System.out.println("TestConfiguration容器啟動初始化。。。"); } // @Bean注解注冊bean,同時可以指定初始化和銷毀方法 // @Bean(name="testBean",initMethod="start",destroyMethod="cleanUp") @Bean @Scope("prototype") public TestBean testBean() { return new TestBean(); } }
public class TestMain { public static void main(String[] args) { // @Configuration注解的spring容器加載方式,用AnnotationConfigApplicationContext替換ClassPathXmlApplicationContext ApplicationContext context = new AnnotationConfigApplicationContext(TestConfiguration.class); //獲取bean TestBean tb = (TestBean) context.getBean("testBean"); tb.sayHello(); } }
2)@Configuration啟動容器+@ComponentScan+@Component注冊Bean
//添加注冊bean的注解 @Component public class TestBean { private String username; private String url; private String password; public void sayHello() { System.out.println("TestBean sayHello..."); } public String toString() { return "username:" + this.username + ",url:" + this.url + ",password:" + this.password; } public void start() { System.out.println("TestBean 初始化。。。"); } public void cleanUp() { System.out.println("TestBean 銷毀。。。"); } }
@Configuration //添加自動掃描注解,basePackages為TestBean包路徑 @ComponentScan(basePackages = "com.dxz.demo.configuration") public class TestConfiguration { public TestConfiguration() { System.out.println("TestConfiguration容器啟動初始化。。。"); } /*// @Bean注解注冊bean,同時可以指定初始化和銷毀方法 // @Bean(name="testNean",initMethod="start",destroyMethod="cleanUp") @Bean @Scope("prototype") public TestBean testBean() { return new TestBean(); }*/ }
public class TestMain { public static void main(String[] args) { // @Configuration注解的spring容器加載方式,用AnnotationConfigApplicationContext替換ClassPathXmlApplicationContext ApplicationContext context = new AnnotationConfigApplicationContext(TestConfiguration.class); //獲取bean TestBean tb = (TestBean) context.getBean("testBean"); tb.sayHello(); } }
備注1:可以使用基於 Java 的配置來管理 bean 的生命周期。@Bean
支持兩種屬性,即 initMethod
和destroyMethod
,這些屬性可用於定義生命周期方法。在實例化 bean 或即將銷毀它時,容器便可調用生命周期方法。生命周期方法也稱為回調方法,因為它將由容器調用。使用 @Bean
注釋注冊的 bean 也支持 JSR-250 規定的標准 @PostConstruct
和 @PreDestroy
注釋。如果您正在使用 XML 方法來定義 bean,那么就應該使用 bean 元素來定義生命周期回調方法。
備注2:可以用兩種方式獲取注解上下文
1)ApplicationContext context = new AnnotationConfigApplicationContext(TestConfiguration.class);
2)ApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(AppContext.class)
備注3:@Configuration+@Bean注冊類時,如果有多個,則可以調用,相當於在application.xml中一個bean定義時引用另一個bean(注冊bean的先后順序)
備注4:如果是在controller這類受容器管理的類中調用,則直接如下定義即可使用
@Autowired
TestBean testBean;