本人已参与[新人创作礼]活动,一起开启掘金创作之路。
Spring容器中的那些事——注解配置
在一个阳光明媚的下午,一名脱发中的程序猿正在准备让一个朋友帮他创建管理一个对象。
程序猿刚刚和Spring搞好了关系,准备见识一下他的厉害.....
Spring是一位大名鼎鼎的生产工,他能把委托者给他的一个对象在自己的仓库里就造好收藏起来,等委托者想用的时候直接拿就可以。
猿猿前去问Spring,怎么才能把我创建的User类交给你管理呢?
Spring说:“hey兄弟,想把一个对象的信息传给我,就要创建一个配置兄,让那位配置兄带着一群类们来我这里。”
Spring补充道:“啊当然啦,要是只有一个对象信息就让他带一个就行。但是啊,咱俩现在这么唠嗑没问题,程序是个严谨的家伙,你得通过某些特殊手段告诉我,来送信的是这位配置兄”
猿猿问:“道理我都懂,那到时候他怎么证明自己是配置兄呢”
Spring:“注解呀,注解就是我和你程序交互的根本手段,咱俩的通用语言♂(斜眼笑)”
猿猿:“害,你看我这脑子,行!那我先去请个配置兄,我用@configuration这个注解表示他是配置兄,别认错了昂!然后@Bean表示这是我携带的类,里面的name属性就是我要给他起的别名”
Spring:“得嘞!”
接下来的一段时间里,猿猿先创造了User类:
package com.tomatoin.pojo;
import org.springframework.beans.factory.annotation.Value;
public class User {
private String name;
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
'}';
}
public String getName() {
return name;
}
@Value("我是User")
public void setName(String name) {
this.name = name;
}
}
然后又创建了携带所有类的配置兄弟:ConfigTest
package com.tomatoin.config;
import com.tomatoin.pojo.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ConfigTest {
@Bean(name = "iAmUser")
public User user(){
return new User();
}
}
程序中configTest头上戴的小帽子@configuration就是通知Spring他是配置兄最好的证据。
“呼呼呼”
“Spring在吗,Spring在吗?我是配置,这里有人托我带的一封信!!”
Spring探出脑袋:“oh你终于来了,把信给我吧,辛苦你了”
config:“给,这封叫做“iAmUser”的。”
Spring收下了信,他要按照这封信上的数据去创建一个对象并把它收藏起来,等我想要的时候随时取。
猿猿:“Spring老兄,我来拿一下前几天送你这里管理的对象,就是叫做“iAmUser”的那个
Spring:“行,你去写个测试类拿吧”
猿猿随后写了这段测试类:
package com.tomatoin;
import com.tomatoin.config.ConfigTest;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MyTest {
@Test
public void test1(){
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConfigTest.class);
Object user = context.getBean("iAmUser");
System.out.println(user.toString());
}
}
Spring:“好了给你~,不过你说你也是,你让人家config跑一趟,就带一个对象数据过来,下次多带几个,我让你请config兄的目的也正是如此,他能一下子带好多呢,都放我这儿管理,下次拿着也方便”
猿猿:“好的。不过兄弟我有一点不太懂,我们程序员自己也能new对象来拿到他们啊,为啥很多人都不自己new对象,而是都放你这儿托管然后再拿呢”
Spring:“害,这不是既能照顾我的生意,又能方便你们。我问你,当你自己去new对象的时候是不是就在后台写死了?人家用户让你改动的时候你是不是还得自己重新new,慢慢改”
猿猿:“这倒是...但是我重新new一下很麻烦吗,我这还得请配置还得找你的这不更麻烦”
Spring:“兄弟...你真以为我这生意白做的?你现在是一个对象重新弄你觉得方便,当有成千上万个的时候呢?你也自个慢慢改?咋的?还嫌加班少?交给我管理之后,你俩之间就不耦合在一块了,修改的时候也只需要改该改动的那部分,比如配置文件,而不用动你的代码”
猿猿:“奥~我想起来了,这就是人们经常提到的IOC控制反转吧,我获得对象的行为由主动行为变成了被动行为,你来干活,我被动接收就行”
终于,Spring结束了一天的工作,猿猿也拿着他想要的对象回了家,当然更重要的是他明白了Spring干的是一件神圣的职业,这使猿猿对它有了几分敬重。
天色已晚,关于那个叫做IOC的话题,两人没有再多聊些什么,毕竟那是一个比较庞大的体系,更是前人们留下的优秀的思想。
To be continued.....
补图:
不使用情况下:
使用Spring IOC思想: