一.XML配置文件形式:
1.在applicationContext.xml文件中配置bean
注意:业务类SayHello的property属性helloworld在业务类中命名必须一致,且有该属性的get/set方法
<bean id="helloWorldImpl" class="com.impl.HelloWorldImpl"></bean> <bean id="sayHello" class="com.say.SayHello"> <property name="helloWorld" ref="helloWorldImpl"></property> </bean>
2.在Test类中添加HelloWorld类的get/set方法——set注入
public class SayHello{ private HelloWorld helloWorld; public HelloWorld getHelloWorld() { return helloWorld; } public void setHelloWorld(HelloWorld helloWorld) { this.helloWorld = helloWorld; } }
3.加载配置文件,获取bean
ApplicationContext applicationContext = new ClassPathXmlApplicationContext( new String[] { "classpath:/applicationContext.xml" }); SayHello sayHello = applicationContext.getBean("sayHello");
二.注解形式:
1.在配置文件中配置spring注解扫描
<context:component-scan base-package="com"/><!---通过该语句可以搜索com及com下子包中的类-> <mvc:annotation-driven/>
2.在需要托管的bean的类名上添加注解:@Controller
@Repository public class HelloWorldImpl implements HelloWorld{}
3.在业务类中调用上面的托管bean,并在属性上添加注解:@Autowired
public class SayHello{ @Autowired private HelloWorld hello; }
区别:
1.无须再在配置文件中配置一大堆的bean——(用@Controller/@Service/@Repository/@Component)
2.不用再在调用某个bean的业务类中写该bean的set/get方法——(用@Resource/@Autowired)
3.不用再继续通过加载配置文件后用getBean(“***”)方式来获取某个类的实例
二.注解形式和XML配置共存:在此过程中需要注意注解方式与配置文件配置方式混合使用(由于业务需求的不同,例如注解方式的情况下使用定时器时就存在混合使用的情况)时的命名规范,当使用注解方式时bean在spring bean容器中的id首字母小写的类全名,而通过配置文件配置时id为自定义。
1.在spring配置文件中添加如下配置:
<bean id="hello" class="com.impl.HelloWorldImpl" />
2.在托管bean(HelloWorldImpl)上添加注解:
@Repository public class HelloWorldImpl implements HelloWorld{}
这样HelloWorldImpl在Spring的bean容器中注册了两个实例。即(hello与helloWorldImpl) 3.在业务类的HelloWorld属性上添加标注:
——即不通过在配置文件中配置hello对应的类,而通过标签自动匹配
public class SayHello{ @Autowired private HelloWorld hello; //注意此处的属性名不是helloWorld,而是hello }
此时,运行后会报异常:
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.HelloWorld] is defined: expected single matching bean but found 2: [helloWorld, helloWorldImpl]由于此处的指针名为hello,通过自动匹配的方式无法确认具体需要用到哪个实例(因为找到了两个!)
在混用的情况下需要对bean实例的命名与bean的名称管理。
上述情况不使用@Controller,直接在配置文件中注册bean(bean的id不为hello),即一个bean在配置文件中注册了两次。
<bean id="helloWorldImpl" class="com.remote.impl.HelloWorldImpl"></bean>也会出现同样的效果。
如果必须使用混用,可以采用四种方式解决该问题:
(1).在业务类(调用类)的属性名与bean容器中的名称相同
如:
public class SayHello{ @Autowired private HelloWorld helloWorld; //此处属性名为helloWorld }(2.).去除@Autowired,直接在spring的bean配置文件中指定业务类属性对应的实例名称
<bean id="sayHello" class="com.say.SayHello"> <property name="hello" ref="helloWorldImpl"></property> </bean>
(3).在@Autowired注解后面加上@Qualifie——(因为@Autowired默认是按照类型查找的)
public class SayHello{ @Autowired @Qualifie("hello") private HelloWorld hello; //注意此处的属性名不是helloWorld,而是hello }(4).将@Autowired替换成@Resource——(因为@Resource默认按照名称查找)
public class SayHello{ @Resource private HelloWorld hello; //注意此处的属性名不是helloWorld,而是hello }
常见错误:
1.通过配置文件配置bean时:
启动项目时报错:spring找不到该类名
Cannot resolve reference to bean 'hessianHelloWorldImpl' while setting bean property 'hello'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'helloWorldImpl' is defined
2.通过注解配置时:
启动时不会报错,但是调用时会出现空指针异常
解决方式:检查配置文件是否有下面两行
<context:component-scan base-package="com"/> <mvc:annotation-driven/>
相关推荐
在Java编程领域,Spring框架是应用最广泛的轻量级开源框架之一,它为开发者提供了丰富的功能,包括依赖注入(DI)、面向切面编程(AOP)以及声明式事务管理等。本资料“动态代理和注解Spring.rar”着重介绍了Spring...
本教程将详细介绍如何将两者结合,通过全XML配置方式进行集成,以实现高效、灵活的后端数据处理。 首先,我们需要了解Spring的核心组件。Spring框架提供了IoC(Inversion of Control,控制反转)和AOP(Aspect-...
Spring提供了`LocalSessionFactoryBean`用于配置基于XML的Hibernate映射,而`AnnotationSessionFactoryBean`则用于处理基于注解的映射。这两个类分别处理不同的映射方式,所以默认情况下,它们不能直接共存于同一个...
在本篇【从零开始学Spring Boot】系列教程中,我们将深入探讨如何在Spring Boot项目中导入并使用XML配置。Spring Boot以其简化Spring应用的初始搭建以及开发过程而闻名,通常推崇的是Java配置而非XML配置。然而,在...
在IT行业中,Spring框架是Java应用开发中...这个示例对于理解如何在Spring环境中使用Kafka进行消息传递非常有帮助,是学习和实践两者结合的好起点。通过深入分析和运行提供的代码,你将能够更深入地理解这一集成过程。
标题中的"spring-expression-3.2.1.RELEASE.zip"是一个Spring框架的组件,Spring Expression Language (SpEL) 的特定版本。SpEL是Spring框架的一部分,它提供了一种强大的表达式语言,用于在运行时查询和操作对象图...
Spring MVC是一个强大的MVC框架,而MyBatis是一个轻量级的持久层框架,两者结合可以提供高效、灵活的数据访问解决方案。下面我们将详细介绍每个步骤和涉及的关键概念。 1. **Spring 4.0中的注解驱动开发** Spring ...
4. **注解配置与XML配置的对比**:Spring框架既支持XML配置也支持注解配置。XML配置方式直观,但代码量大,维护困难;注解配置简洁,减少了XML配置文件,使代码更加清晰,同时提高了可读性和可维护性。然而,对于...
10. **XML与注解配置**:Spring支持XML配置和注解配置,两者可以结合使用,提供了极大的灵活性。5.0版本中,注解配置更为流行,因为它减少了XML的繁琐,使得代码更加简洁。 11. **Spring Schema**:`spring-...
Spring框架允许同时使用注解配置和XML配置,并能将两者的信息合并处理。这种混合配置方式让开发者可以根据具体需求灵活选择配置形式。对于类级别、相对固定且适合注解的配置,可以优先使用注解;而对于需要动态调整...
总结,`spring-boot-examples-master.zip`为我们提供了一个实用的Spring Boot与MyBatis集成学习资源。通过这个Demo,开发者可以直观地了解两者如何协同工作,进而掌握在微服务环境中构建数据访问层的方法。无论是...
《Spring框架5.2.6.RELEASE源码详解》 ...通过阅读和分析源码,可以学习到设计模式、最佳实践以及如何处理复杂问题的策略。对于希望成为专业Java开发者的人来说,掌握Spring源码无疑是一项宝贵的技能。
二、Spring与MyBatis整合步骤 1. 添加依赖:在项目中引入Spring和MyBatis的jar包,以及它们的整合包`spring-mybatis-spring-1.0.1.jar`。 2. 配置Spring:在Spring的配置文件中,定义DataSource、...
在实际应用中,你可以根据项目需求选择使用XML配置还是注解配置,或者两者结合使用。注解配置简化了配置过程,提高了开发效率,但在复杂查询或需要大量自定义配置的情况下,XML配置可能更为灵活。理解并熟练掌握...
标题 "Spring+CXF 全注解版" 暗示了我们将探讨如何在Java应用程序中结合Spring框架和Apache CXF服务,利用注解来简化配置和开发过程。Apache CXF是一个开源的服务框架,它允许开发者创建和消费各种Web服务,而Spring...
总结起来,"SpringDemo-master.zip"是一个展示了Spring与MyBatis集成的实例,通过这个项目,开发者可以学习如何在Spring环境中配置和使用MyBatis,理解两者之间的协作机制,以及如何通过注解和XML配置文件实现数据...
Spring与MyBatis的整合旨在将Spring的管理能力应用到MyBatis的事务、数据库连接等操作上,实现更高效的数据库访问控制。这种整合可以避免手动管理SqlSessionFactory和SqlSession,提高代码的可维护性和可测试性。 ...
8. 注入Mapper:通过@Autowired或@Resource注解,将Mapper接口注入到需要使用的地方,即可调用其方法执行数据库操作。 本资源包“spring-mybatis-spring-1.1.0.zip”提供的正是这样一个完整的整合示例,它包含了...
资源包中的文件名"spring-mybatis-spring-3.0.1"表明了这个版本是针对Spring 3.0.1的,因此在使用时需要注意与之兼容的其他库版本。 四、免费下载与使用注意事项 "spring-mybatis-spring-3.0.1.zip"资源包提供免费...
3. **依赖注入(Dependency Injection,DI)**:Spring的核心特性之一,通过配置或注解方式实现对象之间的依赖关系,降低了组件间的耦合度,提高了代码的可测试性和可维护性。 4. **AOP**:Spring的面向切面编程...