当前位置: 首页 > news >正文

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。

代码如下:

 

[java]  view plain  copy
 
 print?
  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. }  

三、基础类代码

 

Counter:

 

[java]  view plain  copy
 
 print?
  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. }  

Piano类

 

[java]  view plain  copy
 
 print?
  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. }  


四、调用测试类

 

 

[java]  view plain  copy
 
 print?
  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. }  

注意:如果是在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://blog.csdn.net/vvhesj/article/details/47661001 感谢作者

相关文章:

  • 阿里技术面试题全面覆盖?不服,你来补充
  • Atitit mysql 存储过程捕获所有异常,以及日志记录异常信息
  • Android新手引导View
  • [Fri 26 Jun 2015 ~ Thu 2 Jul 2015] Deep Learning in arxiv
  • 删除表A的记录时,Oracle 报错:“ORA-02292:违反完整约束条件(XXX.FKXXX)- 已找到子记录...
  • Redis部署及参数笔记
  • 关于二叉树的遍历梳理(递归、非递归、线索二叉树)
  • JSONObject和JSONArray区别及基本用法
  • Idea中使用git
  • 怎么爆加密过后的前端JS
  • 201521123016《Java程序设计》第14周学习总结
  • datenode节点超时时间设置,Hadoop启动不正常,HDFS冗余数据块的自动删除,NameNode安全模式问题,ntp时间服务同步,机架感知配置...
  • 航天科工发布中国首个工业互联网云平台
  • sql语句查询最新记录
  • Gurobi + CVX + Matlab
  • C++11: atomic 头文件
  • egg(89)--egg之redis的发布和订阅
  • nodejs实现webservice问题总结
  • spark本地环境的搭建到运行第一个spark程序
  • SpingCloudBus整合RabbitMQ
  • vue自定义指令实现v-tap插件
  • 分享几个不错的工具
  • 给初学者:JavaScript 中数组操作注意点
  • 基于axios的vue插件,让http请求更简单
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 让你的分享飞起来——极光推出社会化分享组件
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 收藏好这篇,别再只说“数据劫持”了
  • 用 Swift 编写面向协议的视图
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​你们这样子,耽误我的工作进度怎么办?
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (分布式缓存)Redis持久化
  • (全注解开发)学习Spring-MVC的第三天
  • (三分钟)速览传统边缘检测算子
  • .NET 4.0中的泛型协变和反变
  • .Net 8.0 新的变化
  • .NET Micro Framework初体验(二)
  • .net 按比例显示图片的缩略图
  • .Net 高效开发之不可错过的实用工具
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • /etc/fstab和/etc/mtab的区别
  • @JoinTable会自动删除关联表的数据
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [Android Studio 权威教程]断点调试和高级调试
  • [Android]创建TabBar
  • [Angular] 笔记 8:list/detail 页面以及@Input
  • [APUE]进程关系(下)
  • [BZOJ] 3262: 陌上花开
  • [C# 开发技巧]实现属于自己的截图工具
  • [C++]AVL树怎么转
  • [CUDA手搓]从零开始用C++ CUDA搭建一个卷积神经网络(LeNet),了解神经网络各个层背后算法原理