天天看點

Spring中基于Java的配置@Configuration和@Bean用法

spring中為了減少xml中配置,可以生命一個配置類(例如SpringConfig)來對bean進行配置。

一、首先,需要xml中進行少量的配置來啟動Java配置:

[java] view plain copy

 print?

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"  
  4.     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"  
  5.     xmlns:context="http://www.springframework.org/schema/context"  
  6.     xsi:schemaLocation="  
  7.             http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd  
  8.             http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd  
  9.             http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd  
  10.             http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">  
  11.    <context:component-scan base-package="SpringStudy.Model">  
  12.     </context:component-scan>  
  13. </beans>  

二、定義一個配置類

用@Configuration注解該類,等價 與XML中配置beans;用@Bean标注方法等價于XML中配置bean。

代碼如下:

  1. package SpringStudy;  
  2. import org.springframework.context.annotation.Bean;  
  3. import org.springframework.context.annotation.Configuration;  
  4. import SpringStudy.Model.Counter;  
  5. import SpringStudy.Model.Piano;  
  6. @Configuration  
  7. public class SpringConfig {  
  8.     @Bean  
  9.     public Piano piano(){  
  10.         return new Piano();  
  11.     }  
  12.     @Bean(name = "counter")   
  13.     public Counter counter(){  
  14.         return  new Counter(12,"Shake it Off",piano());  
  15. }  

三、基礎類代碼

Counter:

  1. package SpringStudy.Model;  
  2. public class Counter {  
  3.     public  Counter() {  
  4.     public  Counter(double multiplier, String song,Instrument instrument) {  
  5.         this.multiplier = multiplier;  
  6.         this.song = song;  
  7.         this.instrument=instrument;  
  8.     private double multiplier;  
  9.     private String song;  
  10.     @Resource  
  11.     private Instrument instrument;  
  12.     public double getMultiplier() {  
  13.         return multiplier;  
  14.     public void setMultiplier(double multiplier) {  
  15.     public String getSong() {  
  16.         return song;  
  17.     public void setSong(String song) {  
  18.     public Instrument getInstrument() {  
  19.         return instrument;  
  20.     public void setInstrument(Instrument instrument) {  
  21.         this.instrument = instrument;  

Piano類

  1. public class Piano {  
  2.     private String name="Piano";  
  3.     private String sound;  
  4.     public String getName() {  
  5.         return name;  
  6.     public void setName(String name) {  
  7.         this.name = name;  
  8.     public String getSound() {  
  9.         return sound;  
  10.     public void setSound(String sound) {  
  11.         this.sound = sound;  

四、調用測試類

  1. package webMyBatis;  
  2. import org.springframework.context.ApplicationContext;  
  3. import org.springframework.context.annotation.AnnotationConfigApplicationContext;  
  4. public class SpringTest {  
  5.     public static void main(String[] args) {  
  6.         //ApplicationContext ctx = new ClassPathXmlApplicationContext("spring/bean.xml");// 讀取bean.xml中的内容  
  7.         ApplicationContext annotationContext = new AnnotationConfigApplicationContext("SpringStudy");  
  8.         Counter c = annotationContext.getBean("counter", Counter.class);// 建立bean的引用對象  
  9.         System.out.println(c.getMultiplier());  
  10.         System.out.println(c.isEquals());  
  11.         System.out.println(c.getSong());  
  12.             System.out.println(c.getInstrument().getName());  

注意:如果是在xml中配置beans和bean的話,或者使用自動掃描調用的話,代碼為

ApplicationContext ctx = new ClassPathXmlApplicationContext("spring/bean.xml");// 讀取bean.xml中的内容

Counter c = ctx.getBean("counter", Counter.class);// 建立bean的引用對象

五、運作結果

12.0

false

Shake it Off

Piano