1. 程式人生 > >在spring 中如果使用new建立一個物件時 這個物件將不在受spring管理器管理

在spring 中如果使用new建立一個物件時 這個物件將不在受spring管理器管理

文章如標題具體如下

比如現在有一個service 層

package com.zyc.service.impl;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.zyc.dao.Data1Dao;
import com.zyc.service.Data1;
import com.zyc.util.DynamicDataSource;

@Service("data1")
public class Data1Impl implements Data1  {

	public Data1Dao data1Dao;
	
	@Resource
	public void setData1Dao(Data1Dao data1Dao) {
		this.data1Dao = data1Dao;
	}

    public void deleteUser(String name) {
    	data1Dao.deleteUser(name); //此處將會包空指標錯誤
    	if(5/0==5){
    		
    	}
    }
}

初始化容器

package com.zyc;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.zyc.service.Data1;
import com.zyc.service.impl.Data1Impl;

public class MainClass2 {

	public static void main(String[] args)  {
		
		ApplicationContext context = new ClassPathXmlApplicationContext("spring-applicationContext.xml");
		//Data1 data1= (Data1) context.getBean("data1"); 此處註釋獲得物件通過下面new 的方式
		Data1 data1=new Data1Impl();
		data1.deleteUser("zhao");
		
	}

}

要修改這種錯誤

第一種方式  通過spring 注入物件 及

Data1 data1=new Data1Impl();改為 Data1 data1= (Data1) context.getBean("data1"); 
通過spring 注入物件的方式有很多種這裡就不在列舉只是隨便說一種舉列子
第二種方式 通過靜態變數及
public Data1Dao data1Dao;改為 
@Resource("data1Dao")
public static Data1Dao data1Dao;
當然通過屬性方法的哪個注入就不要了 如果還想用屬性方法注入可以修改如下
    @Resource
    public  void setData1Dao(Data1Dao data1Dao) {
        Data1Impl.data1Dao = data1Dao;
    }
 
spring配置資料夾這裡就不在說。