博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring中基于Java的配置@Configuration和@Bean用法
阅读量:6586 次
发布时间:2019-06-24

本文共 5798 字,大约阅读时间需要 19 分钟。

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

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

[java]
  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。

代码如下:

[java]
  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.   
  7. @Configuration  
  8. public class SpringConfig {  
  9.   
  10.     @Bean  
  11.     public Piano piano(){  
  12.         return new Piano();  
  13.     }  
  14.     @Bean(name = "counter")   
  15.     public Counter counter(){  
  16.         return  new Counter(12,"Shake it Off",piano());  
  17.     }  
  18. }  
package SpringStudy;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import SpringStudy.Model.Counter;import SpringStudy.Model.Piano;@Configurationpublic class SpringConfig {    @Bean    public Piano piano(){        return new Piano();    }    @Bean(name = "counter")     public Counter counter(){        return  new Counter(12,"Shake it Off",piano());    }}
三、基础类代码

Counter:

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

Piano类

[java]
  1. package SpringStudy.Model;  
  2.   
  3.   
  4. public class Piano {  
  5.     private String name="Piano";  
  6.     private String sound;  
  7.   
  8.     public String getName() {  
  9.         return name;  
  10.     }  
  11.   
  12.     public void setName(String name) {  
  13.         this.name = name;  
  14.     }  
  15.   
  16.     public String getSound() {  
  17.         return sound;  
  18.     }  
  19.   
  20.     public void setSound(String sound) {  
  21.         this.sound = sound;  
  22.     }  
  23.   
  24. }  
package SpringStudy.Model;public class Piano {    private String name="Piano";    private String sound;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getSound() {        return sound;    }    public void setSound(String sound) {        this.sound = sound;    }}
四、调用测试类

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

转载地址:http://pnhno.baihongyu.com/

你可能感兴趣的文章
使用WiX制作具有时间限制的安装包
查看>>
企业私有云之rabbitmq高可用
查看>>
C#的四个基本技巧
查看>>
OpenCV学习】矩阵运算和操作2
查看>>
SuperSocket架构设计示意图【转】
查看>>
LeetCode 2 Add Two Numbers
查看>>
Android人脸检测类FaceDetector
查看>>
ajax-Ajax试题
查看>>
Server.Variables属性大全(转载)
查看>>
实现滑动分页(微博分页方式)
查看>>
DataSet.Tables[].Rows[][]的用法
查看>>
第二期: 如何搭建 多用户的平台?(未完)
查看>>
自动血压呼吸检测仪技术方案
查看>>
负值之美:负margin在页面布局中的应用
查看>>
HDU 1711 Number Sequence(KMP裸题,板子题,有坑点)
查看>>
I.MX6 dhcpcd 需要指定网卡
查看>>
Entity Framework 实体框架的形成之旅--实体框架的开发的几个经验总结
查看>>
CentOS6.7安装Python3.4
查看>>
【MVC】AJAX+PartialView实现商城首页的楼层加载
查看>>
如何设置dedecms自定义表单必填项?
查看>>