`
fengshujuan
  • 浏览: 160339 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

在spring容器中注册过的类,什么时候可以用new,什么时候不可以用new

    博客分类:
  • java
阅读更多

假如有一个类Fsj1

public class Fsj1 {
        Service1 service;
	public Fsj1(){
		System.out.println("11111111111111111111111111111111");
	}
        public Service1 getService() {
		return service;
	}

	public void  setService(Service1 service) {
		this.service= service;
	}
}

 

applicationContext-service.xml 中配置如下:

 

<bean id="service1" class="cn.ac.iscas.share.cus.service.Fsj1">
     <property name="service" ref="service1"/>
</bean>
……

 

如果

public class Fsj2 {
	Fsj1 fsj1 =new Fsj1();
	public Fsj2(){
		System.out.println("22222222222222222222222222222222222");
	}
}

 这样,就很有可能会报空指针错误,

因为虽然在Fsj2中创建了一个fsj1实例,但并没有为Fsj1中的service创建实例(如果不采用new,而采用getBean或者在配置文件中配置好依赖关系则没有问题),因此在调用service的方法的时候会报service为null的错误。

 

但是也并非所有的在spring容器中注册过的类度不能new,像下面的情况就可以new

public class Fsj1 {
       String property1;
	public Fsj1(){
		System.out.println("11111111111111111111111111111111");
	}
}

这是为什么呢?

很明显,这是因为在类Fsj2中new了Fsj1的对象之后,fsj1并没有其他需要spring容器注入的类,因而也不会有nullpointer的错误。

分享到:
评论

相关推荐

    模拟实现Spring的IOC

    2、本工程,模拟实现Spring的IOC,将xml中配置的Bean读入到Spring容器中,并在测试用例中调用Spring容器中的bean。 3、开发环境eclipse,jdk1.6。使用第三方jar包有:jdom.jar(用于解析xml文件),junit-4.4.jar...

    高级开发spring面试题和答案.pdf

    面试高级开发的期间整理的面试题目,记录我面试遇到过的spring题目以及答案 目录 ...抽象类和接口的区别,什么时候用抽象类什么时候用接口; StringBuilder和StringBuffer的区别 java值传递和引用传递

    Spring.net框架

    我不想过多的去谈抽象类和接口的区别,在后续的例子中我们将使用接口。由于接口在进行“动态代理” 时仍能保持类型信息,而抽象类可能由于代理的原因导致继承关系的“截断”(如MixIn等)。除此之外,对于单继承的C#...

    Spring基础.pdf

    不需要在代码中通过new的⽅式去在逻辑运⾏中再去创建对象,可以直接从IoC容器中去获取 项⽬启动时已创建完成的实例对象。有效地避免了对象创建过程中所带来的性能消耗。 • 有效地降低了程序与程序之间的耦合度,...

    spring源代码解析

    可以通过使用Spring代码声明式的指定在web应用程序启动时载入应用程序上下文(WebApplicationContext),Spring的ContextLoader是提供这样性能的类,我们可以使用 ContextLoaderServlet或者ContextLoaderListener的...

    尚硅谷]_佟刚_Spring IOC 容器中 Bean 的生命周期.pdf

    3、import用于导入其他配置文件的Bean定义,这是为了加载多个配置文件,当然也可以把这些配置文件构造为一个数组(new String[] {“config1.xml”, config2.xml})传给ApplicationContext实现进行加载多个配置文件,...

    【Spring】总结Spring整合Mybatis的底层原理实现步骤

    Dao:数据访问层,提供让Service层调用的接口,更大的时候,Dao层可以是一个项目。 sqlSession.getMapper();使用的是JDK的动态代理 使用时 自定注入的条件:要被Spring管理。被Spring管理的对象叫做Bean @...

    SSM相关面试题(包括Spring,SpringMVC,Mybaits在内的50道面试题)

    最直观的表达就是,以前创建对象的时机和主动权都是由自己把控的,如果在一个对象中使用另外的对象,就必须主动通过new指令去创建依赖对象,使用完后还需要销毁(比如Connection等),对象始终会和其他接口或类耦合...

    第一个Spring程序(DI的实现).docx

    首先我们理解一点在传统方式中我们使用new的方式来创建一个对象,这会造成对象与被实例化的对象之间的耦合性增加以致不利于维护代码,这是很难受的。在spring框架中对象实例改由spring框架创建,spring容器负责控制...

    Spring面试题

    Spring 框架的功能可以用在任何 J2EE 服务器中,大多数功能也适用于不受管理的环境。Spring 的核心要点是:支持不绑定到特定 J2EE 服务的可重用业务和数据访问对象。毫无疑问,这样的对象可以在不同 J2EE 环境 (Web...

    Spring、SpringMVC和Mybatis框架整合包

    但与我们平时开发接触最多的估计就是IOC容器,它可以装载bean(也就是我们java中的类,当然也包括service dao里面的),有了这个机制,我们就不用在每次使用这个类的时候为它初始化,很少看到关键字new。另外spring...

    spring简介-spring概念与体系结构

    也就是说,我们把需要新建的对象(当然不止我们之前提到的数据层对象,业务层对象同样也可以)放在IOC容器中(交给IOC管理),每当我们需要对象时,直接找IOC拿就行,而在IOC容器中这些被创建管理的对象,我们把它...

    ssh(structs,spring,hibernate)框架中的上传下载

     本文选用的数据库为Oracle 9i,当然你可以在不改动代码的情况下,通过配置文件的调整将其移植到任何具有Blob字段类型的数据库上,如MySQL,SQLServer等。  总体实现  上传文件保存到T_FILE表中,T_FILE表结构...

    spring工厂属性注入

    在spring中,当属性是由工厂方法创造的,而不是用new关键字实例化的,就需要在applicationContext.xml配置工厂方法,是spring容器为我们自动注入属性

    spring技术入门相关源码

    //输出spring容器 System.out.println(ctx); //打印加载的bean名称 System.out.println(java.util.Arrays.toString(ctx.getBeanDefinitionNames())); /*MyBean bean = (MyBean)ctx.getBean("myBean"); //...

    spring依赖注入的理解.docx

    Spring中的依赖注入就是上面说的外部,实例不在由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类。 我们不用关心Car的变化,实例之间的依赖关系由IOC容器负责了,等待Spring...

    jTester使用指南(带书签).pdf

    加载spring容器 @AutoBeanInject让框架自动查找和注册需要的bean @AutoBeanInject规则详解 Spring Bean依赖项查找规则 特殊实现类的bean注册 自动注册的bean如何实现spring的init-method方法 声明bean的简单属性 ...

    PHP进阶学习之依赖注入与Ioc容器详解

    最早在java的spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。目前许多主流PHP框架也使用了依赖注入容器,如ThinkPHP、Laravel等。 ...

    基于maven项目的SSM框架与layu前端框架的代码

    在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类(假设这个类名是A),分配的方法就是调用A的setter...

    Spring启动流程.java

    AbstractApplicationContext.refresh(){ 1.为刷新准备此上下文 ...准备bean工厂以供在此上下文中使用。配置工厂的标准上下文特征,例如上下文的类加载器和后置处理器。 prepareBeanFactory(beanFactory){ . . .

Global site tag (gtag.js) - Google Analytics