spring中为了减少xml中配置,可以生命一个配置类(例如SpringConfig)来对bean进行配置。
一、首先,需要xml中进行少量的配置来启动Java配置:
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="
- http:
- http:
- http:
- http:
- <context:component-scan base-package="SpringStudy.Model">
- </context:component-scan>
- </beans>
二、定义一个配置类
用@Configuration注解该类,等价 与XML中配置beans;用@Bean标注方法等价于XML中配置bean。
代码如下:
- package SpringStudy;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import SpringStudy.Model.Counter;
- import SpringStudy.Model.Piano;
-
- @Configuration
- public class SpringConfig {
-
- @Bean
- public Piano piano(){
- return new Piano();
- }
- @Bean(name = "counter")
- public Counter counter(){
- return new Counter(12,"Shake it Off",piano());
- }
- }
三、基础类代码
Counter:
- 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类
- 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;
- }
-
- }
四、调用测试类
- 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 annotationContext = new AnnotationConfigApplicationContext("SpringStudy");
- Counter c = annotationContext.getBean("counter", Counter.class);
- 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
3楼 kepeixiang 2017-02-05 14:03发表 [回复]-
-
第一步是基于xml配置,,跟基于javaConfig没啥关系,,,,也就是说第一步不用下面步骤照样可以正常运行.
2楼 A天道酬勤 2016-12-15 16:20发表 [回复]-
-
ApplicationContext annotationContext = new AnnotationConfigApplicationContext("SpringStudy");
这一句的SpringStudy是从哪里来的
Re: 酸辣大头熊 2016-12-30 10:51发表 [回复]-
-
回复A天道酬勤:貌似是包名。
1楼 weenhall 2016-07-20 14:15发表 [回复]-
-
我想问下,包名可以大写吗,第一次看见包名还可以大写的,你确定不报错
Re: 酸辣大头熊 2016-12-30 10:50发表 [回复]-
-
回复weenhall:可以,只是不规范而已,甚至中文也能用。。。不信你可以尝试一下。