在spring 中如果使用new建立一個物件時 這個物件將不在受spring管理器管理
阿新 • • 發佈:2018-12-23
文章如標題具體如下
比如現在有一個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配置資料夾這裡就不在說。