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

2021-02-25 10:43:08 浏览数 (1)

转载自 http://blog.csdn.net/vvhesj/article/details/47661001

Spring中为了减少xml中配置,可以声明一个配置类(例如SpringConfig)来对bean进行配置。

一、首先,需要xml中进行少量的配置来启动Java配置:

[java] view plain copy

  1. "1.0" encoding="UTF-8"?>  
  2. "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. package="SpringStudy.Model">  

二、定义一个配置类

用@Configuration注解该类,等价 与XML中配置beans;用@Bean标注方法等价于XML中配置bean。

代码如下:

[java] view plain copy

  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.     }  
  16. }  

三、基础类代码

Counter:

[java] view plain copy

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

Piano类

[java] view plain copy

  1. package SpringStudy.Model;  
  2. public class Piano {  
  3. private String name="Piano";  
  4. private String sound;  
  5. public String getName() {  
  6. return name;  
  7.     }  
  8. public void setName(String name) {  
  9. this.name = name;  
  10.     }  
  11. public String getSound() {  
  12. return sound;  
  13.     }  
  14. public void setSound(String sound) {  
  15. this.sound = sound;  
  16.     }  
  17. }  

四、调用测试类

[java] view plain copy

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

注意:如果是在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

0 人点赞