在spring 中如果使用new创建一个对象时 这个对象将不在受spring管理器管理
2017-01-06 08:34
507 查看
文章如标题具体如下
比如现在有一个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 注入对象的方式有很多种这里就不在列举只是随便说一种举列子
第二种方式 通过静态变量及
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配置文件夹这里就不在说。
相关文章推荐
- new一个类对象和使用类名创建一个对象有什么区别?该怎么解决
- spring-02 spring的bean管理(使用注解方式创建对象 附代码)
- [笔试题目]使用Stringbuffer无 参的构造函数创建 一个对象时,默认的初始容量是多少? 如果长度不够使用了,自动增长多少倍?
- Spring 使new方法创建的对象可以引用spring管理的bean.
- 如果某一个对象没有提供创建函数,或创建函数无法达到期望的效果,如果创建新的这个类型的对象?
- Hibernate查询,返回new对象(注意这个新定义的类要有构造函数),使用sql带条件分页查询并且把结果显示到一个对象的集里面的解决方案
- Factory 定义一个接口,客户可以使用这个接口创建一个对象.同时,我们还可以控制对那个类进行实例化
- spring-01 spring的bean管理(使用配置文件方式创建对象 附代码)
- spring架构,创建一个全局使用的application对象
- 手动创建(new)对象,使用spring容器中的bean(ServletContext)。
- Hibernate查询,返回new对象(注意这个新定义的类要有构造函数),使用sql带条件分页查询并且把结果显示到一个对象的集里面的解决方案
- new一个类对象和使用类名创建一个对象有什么区别?
- javascript 中的 prototype和constructor属性的使用(constructor属性始终指向创建当前对象的构造函数,每个函数都有一个默认的属性prototype,而这个prototype的constructor默认指向这个函数)
- 1.在使用new创建数组后,此时数组还是一个引用数组。 只有再创建新的对象,并把对象赋值给数组引用,到此初始化结束2.什么是引用类型?
- javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
- 使用JavaScript创建一个字符串对象
- 一个新的对象创建机制的思考--C++下实现类似于Java的对象管理机制及反射
- 使用Maven管理项目-----创建 Struts2,Spring,Hibernate项目
- 使用隐藏的new来创建对象
- 使用Spring来创建一个简单的工作流引擎