`
tom_seed
  • 浏览: 322118 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring注解式与配置文件式

IOC 
阅读更多

Spring注解方式bean容器管理

 

1.通过在配置文件中配置spring组件注入

<context:component-scan base-package="com"/><!---通过该语句可以搜索com及com下子包中的类->
<mvc:annotation-driven/>

 

 

2.为Spring编写简单bean类,一般对应接口与具体实现类

例如:

a.在com包下建立如下接口:HessianHelloWorld

b.com.impl包下新建如下实现类:HessianHelloWorldImpl

 

3.在此处使用注解形式进行来支持bean的管理

   在具体需要托管的bean的类名上添加注解:@Controller

   完整代码如下:

 

@Controller
public class HessianHelloWorldImpl implements HessianHelloWorld{}

 

 

4.在业务类中调用上面的托管bean,以动态代理的形式引入;

    private HessianHelloWorld hello;

    并在属性上添加注解

    @Autowired

    完整代码如下:

 

@Autowired
private HessianHelloWorld hello;

注解方式结束

 

 

Spring配置文件形式:

1.去除上面的所有注解

   在Spring配置文件中添加类的配置

<bean id="hessianHelloWorldImpl" class="com.impl.HessianHelloWorldImpl"></bean>

 

2.在Spring配置文件中添加业务类的配置

   业务类名为Test,在业务类中配置属性(helloworld)及属性指向托管bean的id,其中属性helloworld在业务类中命名必须一致,且有该属性的get/set方法

<bean id="test" class="com.test.Test">
        <property name="helloWorld" ref="hessianHelloWorldImpl"></property>
</bean>

 

3.在Test.java中添加

   private HessianHelloWorld helloWorld;

   与get/set方法

private HessianHelloWorld helloWorld;

public HessianHelloWorld getHelloWorld() {
		return helloWorld;
}

public void setHelloWorld(HessianHelloWorld helloWorld) {
		this.helloWorld = helloWorld;
}

配置文件方式结束

 

注意事项

在此过程中需要注意注解方式与配置文件配置方式混合使用(由于业务需求的不同,例如注解方式的情况下使用定时器时就存在混合使用的情况)时的命名规范,当使用注解方式时bean在spring bean容器中的id首字母小写的类全名,而通过配置文件配置时id为自定义。

 

如下实例为同时使用了注解方式与配置方式:

1.在spring配置文件中添加如下配置:

<bean id="helloWorld" class="com.impl.HessianHelloWorldImpl" />

 

2.在托管bean(HessianHelloWorldImpl)上添加注解

@Controller
public class HessianHelloWorldImpl implements HessianHelloWorld{}

 

 

这样HessianHelloWorldImpl在Spring的bean容器中注册了两个实例。即(helloWorld与hessianHelloWorldImpl)

 

3.在业务类(调用类)的属性上添加标注,即不通过在配置文件中配置hello对应的类,而通过标签自动匹配。

@Autowired
private HessianHelloWorld hello;

 

 

启动时会报

nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No unique bean of type [com.HessianHelloWorld] is defined: 
expected single matching bean but found 2: [helloWorld, hessianHelloWorldImpl]

由于此处的指针名为hello,通过自动匹配的方式无法确认具体需要用到哪个实例

 

在混用的情况下需要对bean实例的命名与bean的名称管理。

上述情况不使用@Controller,直接在配置文件中注册bean(bean的id不为hello),即一个bean在配置文件中注册了两次。

<bean id="hessianHelloWorldImpl" class="com.remote.impl.HessianHelloWorldImpl"></bean>

也会出现同样的效果。

 

如果必须使用混用,可以在业务类(调用类)的属性名与bean容器中的名称相同

@Autowired
private HessianHelloWorld helloWorld;

或者去除@Autowired直接在spring的bean配置文件中指定业务类属性对应的实例名称

<bean id="test" class="com.test.Test">
        <property name="hello" ref="hessianHelloWorldImpl"></property>
</bean>

 

 

常见错误:

通过配置文件配置bean的使用时

项目启动时报错:

Cannot resolve reference to bean 'hessianHelloWorldImpl' while setting bean property 'hello'; 
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No bean named 'hessianHelloWorldImpl' is defined

 spring找不到该类名,需要检查spring配置文件中bean的配置,若使用标注的则需要检查

<context:component-scan base-package="com"/>
<mvc:annotation-driven/>

是否已经添加

当业务调用类中使用标签时(@Autowired),可能在启动时不会报错,但是调用时会出现空指针异常,也可能是因为和上面的情况一样未指定bean的缘故

分享到:
评论
2 楼 tom_seed 2013-08-13  
sunzhenhua0608 写道
在“Spring配置文件形式:”中的第三步有个地方写错了,应该是在在Test.java中添加private HessianHelloWorld helloWorld;与get/set方法,而不是在HessianHelloWordImpl中,它只是一个bean。----误导新手

谢谢指正
1 楼 sunzhenhua0608 2013-08-09  
在“Spring配置文件形式:”中的第三步有个地方写错了,应该是在在Test.java中添加private HessianHelloWorld helloWorld;与get/set方法,而不是在HessianHelloWordImpl中,它只是一个bean。----误导新手

相关推荐

    spring配置文件----注解配置

    本主题聚焦于Spring框架的配置文件以及其中的注解配置方式。注解配置是Spring框架的一种简化配置手段,它允许开发者通过在类或方法上添加特定的注解,替代传统的XML配置文件,使得代码更加简洁且易于维护。 首先,...

    在非spring注解类中使用spring容器中的bean_普通类中使用yml配置文件中的配置信息

    然而,在某些情况下,我们可能需要在非Spring注解的类中访问Spring容器中的Bean,或者在这些类中使用YAML配置文件中的配置信息。本篇将详细介绍如何在这样的场景下实现这一目标。 首先,让我们来理解如何在非Spring...

    非注解时自动配置Mybatis spring配置文件和Mybatis自动生成类所需配置文件

    此工具自动生成非注解时Spring整合MyBatis时需要的一些配置文件,对于使用较新版本的spring,可以忽视生成的dao的配置文件,建议采用spring的扫描方式。生成的GeneratorConfigXML修改jdbc驱动位置后可直接用使用...

    Spring依赖包和配置文件

    在Spring开发中,依赖包和配置文件是构建应用程序的基础。本篇将详细介绍Spring依赖包和配置文件的相关知识。 一、Spring依赖包 1. **Spring Core**:这是Spring框架的核心部分,提供了IoC(Inversion of Control,...

    Spring基于注解的缓存配置--web应用实例

    在"SpringCacheWeb"这个压缩包文件中,可能包含了Spring Cache在Web应用中的配置示例,包括XML配置文件、Java配置类,以及使用注解的Controller和Service类。通过研究这些示例,你可以更好地理解如何在实际项目中...

    Spring Boot多模块配置文件读取

    - Spring Boot提供了`@ConfigurationProperties`注解,可以将配置文件中的键值对映射到Java对象的属性上,增强代码的可读性。 - 创建一个类,用`@Component`或`@Configuration`注解,并使用`@...

    spring注解aop配置详解

    Spring AOP,即Aspect-Oriented Programming(面向切面编程),是Spring框架的重要特性,它为应用程序提供了声明式的企业级服务,如...在实际开发中,熟练掌握Spring AOP的注解配置无疑会极大地提升我们的工作效率。

    Spring 注解 小例子

    Spring注解的主要目的是消除XML配置文件,使开发者能够通过在类或方法上直接添加注解来声明对象及其依赖关系。这个小例子将深入探讨Spring框架中的主要注解及其用法。 1. `@Component`、`@Service`、`@Repository` ...

    ssm注解,以及配置文件

    SSM注解和配置文件 SSM(Spring、SpringMVC、MyBatis)是一种流行的Java Web开发框架,广泛应用于企业级应用开发中。在SSM框架中,注解和配置文件是两个非常重要的概念,本文将对SSM注解和配置文件进行详细的解释。...

    Spring注解配置中间层供Struts2使用

    首先,让我们深入理解Spring注解配置。Spring框架提供了一系列注解,如`@Component`、`@Service`、`@Repository`和`@Controller`,这些注解用于标记Java类作为Spring Bean。`@Component`是基础注解,其他三个注解(`...

    Spring注解注入属性

    使用Spring注解进行依赖注入,如`@Autowired`和`@Resource`,不仅简化了代码结构,减少了XML配置文件的冗余,还增强了代码的可读性和灵活性。通过合理利用这些注解及其辅助注解如`@Qualifier`,开发者可以更高效地...

    对Spring中注解怎么实现的一些基本原理

    本文将深入探讨Spring注解的基本原理,包括它们如何被解析、处理以及如何影响应用程序的生命周期。 首先,我们需要了解注解在Java语言中的本质。注解是一种元数据,允许程序员在源代码中嵌入信息,这些信息可以被...

    spring加载多个配置文件

    对于Java配置,Spring允许在配置类中使用`@ImportResource`注解来引入XML配置文件,或者直接通过`@Configuration`注解的类来引用其他配置类。例如: ```java @Configuration @ImportResource({"classpath:config1....

    Struts2+spring注解配置简介

    总结来说,Struts2+Spring的注解配置能够帮助开发者减少XML配置文件的繁琐,提高代码的可读性和可维护性。通过合理利用Spring的依赖注入和Struts2的Action注解,我们可以实现更简洁、高效的Web应用程序。在实际开发...

    Quartz2.2.1基于Spring注解方式配置Quartz

    总结,通过上述步骤,我们已经成功地使用Spring注解配置了Quartz2.2.1,实现了基于注解的任务调度。这种方式简化了配置,使得任务管理和扩展更加方便。在实际开发中,可以根据项目需求调整触发规则,实现复杂的定时...

    Spring 注解 方式配制的小demo

    尽管我们无法直接访问这个链接,但我们可以基于常见的Spring注解配置实践来解释相关概念。 1. `@Component`:这是Spring中的基础注解,用于标记一个类为Spring管理的bean。它的子注解包括`@Service`、`@Repository`...

    Spring框架xml注解配置方式实例

    "springtest3"通常代表一个或多个Java源代码文件,这些文件包含使用Spring注解的类。例如,可能会有一个`@Component`注解的类表示一个Spring Bean,或者一个`@Service`、`@Repository`或`@Controller`注解的类,...

    Spring demo 自动检测注解

    通常,这样的示例会包含一个或多个使用`@Autowired`注解的类,以及相关的配置文件或Java配置类。通过分析这个示例,我们可以更好地理解Spring自动检测注解的实际应用。 总结来说,Spring的自动检测注解`@Autowired`...

    spring注解 -----最简单的注解与自动装配例子

    在Spring框架中,注解是实现依赖注入(Dependency Injection,DI)的一种重要方式,极大地简化了配置文件,提高了代码的可读性和可维护性。本篇文章将深入探讨Spring中的注解,以及如何通过注解进行自动装配。 首先...

Global site tag (gtag.js) - Google Analytics