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

Spring中的依赖检查及常见异常

阅读更多

Spring中的依赖检查及常见异常

 

 

Spring除了能对容器中bean的依赖设置进行检查外,还可以检查bean定义中实际属性值的设置,当然也包括采用自动装配方式设置属性值的检查。

当需要确保bean的所有属性值(或者属性类型)被正确设置的时候,那么这个功能会非常有用。当然,在很多情况下,bean类的某些属性会具有默认值,或者有些属性并不会在所有场景下使用,因此这项功能会存在一定的局限性。就像自动装配一样,依赖检查也可以针对每一个bean进行设置。依赖检查默认为not,它有几种不同的使用模式,在xml配置文件中,可以在bean定义中为dependency-check属性使用以下几种值:

模式

说明

none

没有依赖检查,如果bean的属性没有值的话可以不用设置。

 

simple

对于原始类型及集合(除协作者外的一切东西)执行依赖检查

 

object

仅对协作者执行依赖检查

 

all

对协作者,原始类型及集合执行依赖检查

 

下面我们用实例来证明,准备三个类如下: 

 

 

public class AddressServiceImpl {	
	/**住址*/
	private String address;		
	public void setAddress(String address){
		this.address=address;
	}
}

	
public class HomeAddressServiceImpl extends AddressServiceImpl {
	
	private String address;
	
	public void setAddress(String address){
		this.address=address;
	}
	
	public HomeAddressServiceImpl() {
		super();
	}
	public HomeAddressServiceImpl(String address){
		this.address=address;
	}

}

public class EmpServiceImpl {	
	/**公司地址*/
	private AddressServiceImpl companyAddress;	
	public void setCompanyAddress(AddressServiceImpl companyAddress){
		this.companyAddress=companyAddress;
	}
	}

 

 

 

  Spring中的配置文件

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
	<bean id="homeAddressServiceImpl" class="cn.csdn.service.HomeAddressServiceImpl"
		scope="singleton">
		<property name="address">
			<value>北京海淀上地软件园</value>
		</property>	
	</bean>   
   <bean id="addressServiceImpl" class="cn.csdn.service.AddressServiceImpl" scope="singleton"/>
	-->
	<bean id="empServiceImpl" class="cn.csdn.service.EmpServiceImpl"
		scope="singleton" autowire="byType" dependency-check="objects" />
</beans>

 

 

 

  

 

 

声明:

 

 dependency-check="objects":依赖对象检查 ,如果对象不存在就会出现bug

 dependency-check:

    none:没有依赖检查

    simple(除了协作者)原始数据、集合执行依赖检查

     objects仅对协作者的依赖检查

 all 所有

 

 

 

注意异常:

  

<!-- 当有多个相同类型的bean时,会出现bug如下: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'empServiceImpl' defined in file [D:\Workspaces\MyEclipse 8.6\20110419_01\bin\applicationContext.xml]: Unsatisfied dependency expressed through bean property 'companyAddress': : No unique bean of type [cn.csdn.service.AddressServiceImpl] is defined: expected single matching bean but found 2: [homeAddressServiceImpl, addressServiceImpl]; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [cn.csdn.service.AddressServiceImpl] is defined: expected single matching bean but found 2: [homeAddressServiceImpl, addressServiceImpl] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1091) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:982) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) at java.security.AccessController.doPrivileged(Native Method) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) at cn.csdn.service.App.test(App.java:12) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41) at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) at org.junit.runners.ParentRunner.run(ParentRunner.java:220) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [cn.csdn.service.AddressServiceImpl] is defined: expected single matching bean but found 2: [homeAddressServiceImpl, addressServiceImpl] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:621) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1076) ... 40 more

 

 

结束语:

 

 这通过xml的配置文件来进行配置;假若你在使用Java 5可以采用源代码级的注解(annotations)来进行配置

<!--EndFragment-->

3
3
分享到:
评论
1 楼 javawangli 2011-04-21  
常用的是simple值

相关推荐

    Spring框架十一种常见异常的解决方法汇总

    Spring框架十一种常见异常的解决方法汇总 在 Spring 框架中,经常会遇到一些常见的异常,这些异常可能会导致程序崩溃或无法正常运行。因此,了解这些异常的解决方法非常重要。在本文中,我们将总结十一种常见的 ...

    25个经典的Spring面试问题包含答案

    以上是Spring面试中常见的25个问题及其解答,涵盖了Spring的核心概念、核心模块以及与Spring相关的各种技术和实践。深入理解这些内容,将有助于在面试中脱颖而出,或者在日常开发中提升工作效率。

    spring面试常见问题

    7. 异常处理:Spring提供了一个方便的API来将特定技术的异常(如JDBC、Hibernate或JDO等抛出的异常)转换为一致的、未经检查的异常。 文档的描述部分提到,这些面试问题是为了帮助读者熟悉可能在面试中遇到的问题...

    Spring-Reference_zh_CN(Spring中文参考手册)

    3.3.7. 依赖检查 3.3.8. 方法注入 3.3.8.1. Lookup方法注入 3.3.8.2. 自定义方法的替代方案 3.4. bean的作用域 3.4.1. Singleton作用域 3.4.2. Prototype作用域 3.4.3. 其他作用域 3.4.3.1. 初始化web配置 3.4.3.2. ...

    Spring5.pdf

    Spring Cloud是基于Spring Boot的一系列工具集,旨在快速建立分布式系统中的一些常见模式(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话和集群状态)。...

    spring常见错误

    例如,在`HelloServiceImpl`类中,如果尝试注入`HelloDao`实例,但没有提供相应的setter方法,Spring将无法完成依赖注入,从而抛出异常。 为了解决这个问题,需要确保在服务实现类中正确地声明了setter方法,并且其...

    spring mvc 搭建依赖包

    在Spring MVC中,AOP可以用于在Controller方法执行前后添加拦截器,实现如性能监控、安全检查等功能。 2. **Spring JDBC (Java数据库连接)** `spring-jdbc-3.2.0.RELEASE.jar` 提供了对JDBC的抽象层,简化了数据库...

    探秘Spring框架解决循环依赖的高效策略

    循环依赖是软件设计中常见的问题,特别是在大型Java企业应用中,它可能导致系统僵死或者运行时异常。Spring通过三级缓存机制和AOP代理巧妙地解决了这个问题。 首先,我们要理解什么是循环依赖。循环依赖是指两个或...

    Spring中文帮助文档

    3.3.6. 依赖检查 3.3.7. 方法注入 3.4. Bean的作用域 3.4.1. Singleton作用域 3.4.2. Prototype作用域 3.4.3. Singleton beans和prototype-bean的依赖 3.4.4. 其他作用域 3.4.5. 自定义作用域 3.5. 定制bean...

    Spring常见面试题

    Spring常见面试题 Spring框架是Java平台上的一个开源的软件框架,由Rod Johnson创建,現在由Spring.io维护。Spring框架提供了一个通用的编程模型和配置机制,使得应用程序更加灵活、可维护和可扩展。 设计模式 ...

    spring包,spring开发工具

    Spring框架是Java开发中的核心工具集,它以其模块化、可扩展性和易用性而闻名。这个名为"spring"的压缩包很可能包含了Spring框架的主要组件和相关开发资源,旨在简化开发流程并提高软件的可靠性。 1. **Spring Core...

    Maven创建Spring+SpringMvc+MyBatis包含网上常见问题解答

    在创建Spring+Spring MVC+MyBatis应用时,我们需要在pom.xml中添加相应的依赖,如Spring的核心库、Spring MVC、MyBatis以及它们的依赖项。 接下来,Spring是一个全面的企业级应用开发框架,提供了依赖注入(DI)和...

    Spring的事务10种常见失效场景总结.zip

    4. **异常处理不当**:在事务中,只有当方法抛出未被捕获的异常时,Spring才会回滚事务。如果捕获了异常,事务可能不会被回滚。因此,谨慎处理异常,避免错误地捕获并忽略它们。 5. **回调方法中的事务失效**:在...

    Spring API

    3.3.6. 依赖检查 3.3.7. 方法注入 3.4. Bean的作用域 3.4.1. Singleton作用域 3.4.2. Prototype作用域 3.4.3. Singleton beans和prototype-bean的依赖 3.4.4. 其他作用域 3.4.5. 自定义作用域 3.5. 定制bean...

    Spring特性.xmind

    1. **依赖注入(Dependency Injection, DI)**:这是Spring的核心特性之一,它允许开发者在运行时动态地将依赖关系注入到对象中,而不是在代码中硬编码这些依赖。通过XML配置、注解或Java配置,可以轻松管理对象间的...

    浅谈Spring解决循环依赖的三种方式

    当我们尝试使用setter方法注入时,Spring容器会首先检查三级缓存中是否已经存在该Bean的依赖关系,如果存在,则可以直接使用该依赖关系;否则,将抛出NoSuchBeanDefinitionException异常。 第三种:使用三级缓存...

    hibernate,struts,spring 常见错误信息

    SSH,即Spring、Struts和Hibernate的组合,是Java开发中的经典企业级应用框架,用于构建高效、可扩展的Web应用程序。这三种技术在实际使用过程中可能会遇到各种错误,了解并解决这些错误对于开发者来说至关重要。 ...

    java解决org.springframework.web.context.ContextLoaderListener

    `ClassNotFoundException` 是Java中常见的异常,它表明JVM尝试加载一个类时,无法找到对应的字节码文件。在Spring框架中,这可能是因为缺少了Spring本身或者其他依赖库的JAR包。例如,如果你的WAR文件中没有包含必要...

    Spring_2.pdf

    Spring框架对异常处理进行了优化,将编译时异常(如JDBC中的SQLException)转换为运行时异常。这样做有助于简化异常处理流程,提高程序的健壮性。 #### IoC(控制反转) IoC是Spring框架的一个核心特性,其主要...

    spring boot创建项目包依赖问题的解决

    在spring boot项目中,可能会出现spring-core依赖包的问题,即使已经解决了依赖包问题,还是会报错信息。解决方法是删除整个maven的repository的包,重新更新依赖和下载jar包。作者发现该问题是由于插件包的问题,...

Global site tag (gtag.js) - Google Analytics