天天看點

Spring元件注冊注解之@Configuration @Bean

   在往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): 銷毀