在往Spring IOC容器添加組件的時候,一般XML聲明的方式如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="person" class="com.yibai.spring.annotation.bean.Person" />
</beans>
相對應的 如果使用註解向IOC添加組件,對應的註解就是@Configuration和@
@Configuration: 在類上聲明,表示這是一個配置組件;
@Bean: 聲明在方法上方法上和註解上,跟XML配置bean節點對應的一樣,也提供 名稱,初始化方法,銷燬方法的聲明;
代碼舉例
package com.yibai.spring.annotation.bean;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
@Setter
@Getter
@ToString
@Slf4j
public class Person {
private String name;
private int age;
private Address address;
public void init() {
log.debug("初始化");
}
public void destory() {
log.debug("銷燬");
}
}
/**
* Project Name:yibai-spring-annotation
* File Name:MainConfig.java
* Package Name:com.yibai.spring.annotation.main.config
* Date:2019年1月5日上午11:20:26
* Copyright (c) 2019, www.windo-soft.com All Rights Reserved.
*
*/
package com.yibai.spring.annotation.main.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.yibai.spring.annotation.bean.Person;
/**
主配置類
*/
@Configuration
public class MainConfig {
//聲明一個組件加入IOC容器
@Bean(name = "pers", initMethod = "init", destroyMethod = "destory")
public Person person() {
return new Person();
}
}
package com.yibai.spring.annotation.main;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.yibai.spring.annotation.bean.Person;
import com.yibai.spring.annotation.main.config.MainConfig;
/**
* Hello world!
*
*/
public class MainClass {
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(
MainConfig.class);
Person person = applicationContext.getBean(Person.class);
System.out.println(person);
//直接點擊關閉按鈕是無法執行銷燬方法的,通過close方法關閉IOC容器
applicationContext.close();
}
}
運行結果
[DEBUG] 2019-01-05 21:27:20,322 --> [main] com.yibai.spring.annotation.bean.Person.init(Person.java:19): 初始化
Person(name=null, age=0, address=null)
[DEBUG] 2019-01-05 21:27:20,348 --> [main] com.yibai.spring.annotation.bean.Person.destory(Person.java:23): 銷燬