map.get(0)和spring注入构造方法引用bean的问题

1 篇文章 0 订阅

        前几天遇到两个比较可笑的问题,现在总结起来,还觉得比较滑稽,一个是map.get(0),另一个是spring在构造bean时在构造方法里面引用别的bean的问题。

        首先map.get(0)的问题应该是用惯了list的get方法。看例子

@Test
	public void test22(){
		Map<String, Object> map= new HashMap<String, Object>();
		map.put("one", "one_value");
		map.put("two", "two_value");
		System.out.println(map.get(0));
	}


        需求是想获取map里面第一个元素的value值,于是就这样在代码里面写,但运行时竟然抛出个null,想了半天,哈哈,哎哎,真是一个愚蠢的问题。(另外提醒一下,set也是没有get(index)的方法的!)

 

 

        第二个也是个很低级的错误,就是在spring的bean被初始化时,我想引用别的bean做一些事,于是我把引用的bean放在构造方法里面,代码如下:

 

@Service("updateAgentService")
public class UpdateAgentServiceImpl {

	private Logger logger = Logger.getLogger(getClass());
	@Autowired
	private FtpdServer ftpdServer;
	@Autowired
	private AgentDao agentDao;
	
	
	public UpdateAgentServiceImpl(){
		
		
		System.out.println("agentDao:"+agentDao);
		
		
		 
	}
}
@PostConstruct
 public void initUpdateEvent() {
	System.out.println("agentDao2:"+agentDao);
 }


 

        经过多次的测试,发现总是agentDao输出的null,当时我就发现别的代码里面就是这样注入bean的啊,为什么我的不行啊,我就想着肯定有问题,脑子进水了,后来还是在老大提醒了我,原来是这样的,spring在启动时查找要管理的bean,然后用反射的方法new一个bean,但这个时候恰好调用的就是构造方法,然后我又在构造方法里面引用别的bean,想一下,这个时候,本身的bean还没有初始化完成,我就调用了别的bean的方法,肯定出错啊,因为spring是先反射new一个bean,然后在注入本身引用的别的bean啊,是吧。后来改为PostConstruct修饰一个方法,然后就实现了自己的逻辑。还可以输出agentdao对象了。

       低级的错误!!!

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值