Spring注解式与配置文件式
http://tom-seed.iteye.com/blog/1584632
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的缘故
Spring注解式与配置文件式的更多相关文章
- Spring 注解方式引入配置文件
配置文件,我以两种为例,一种是引入Spring的XML文件,另外一种是.properties的键值对文件: 一.引入Spring XML的注解是@ImportResource @Retention(R ...
- spring注解注入properties配置文件
早期,如果需要通过spring读取properties文件中的配置信息,都需要在XML文件中配置文件读取方式. 基于XML的读取方式: <bean class="org.springf ...
- Spring注解式事务解析
#Spring注解式事务解析 增加一个Advisor 首先往Spring容器新增一个Advisor,BeanFactoryTransactionAttributeSourceAdvisor,它包含了T ...
- spring注解式参数校验
很痛苦遇到大量的参数进行校验,在业务中还要抛出异常或者返回异常时的校验信息,在代码中相当冗长,今天我们就来学习spring注解式参数校验. 其实就是:hibernate的validator. 开始啦. ...
- MVC的验证(模型注解和非侵入式脚本的结合使用) .Net中初探Redis .net通过代码发送邮件 Log4net (Log for .net) 使用GDI技术创建ASP.NET验证码 Razor模板引擎 (RazorEngine) .Net程序员应该掌握的正则表达式
MVC的验证(模型注解和非侵入式脚本的结合使用) @HtmlHrlper方式创建的标签,会自动生成一些属性,其中一些属性就是关于验证 如图示例: 模型注解 通过模型注解后,MVC的验证,包括前台客 ...
- hibernate3整合spring2时hibernate即用注解又用配置文件情况时spring配置文件的配置写法
hibernate只用注解时,spring的配置文件的配置如下 <bean id="dataSource" class="org.apache.commons.db ...
- Spring注解使用和与配置文件的关系
Spring注解使用和与配置文件的关系 1 注解概述与容器管理机制 Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repositor ...
- 【spring boot】使用注解@ConfigurationProperties读取配置文件时候 报错 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'rocketmqAutoConfiguration': Unsatisfied dependenc
如题,配置文件如下: #注册中心配置 eureka: instance: instanceId: ${spring.application.name}:${random.int} hostname: ...
- 【Spring注解驱动开发】使用@PropertySource加载配置文件,我只看这一篇!!
写在前面 很多小伙伴都在问:冰河,你的Spring专题更新完了吗?怎么感觉像是写了一半啊?我:没有更新完呀,整个专题预计会有70多篇.那怎么更新了一半就去写别的了呢?那是因为有很多其他的小伙伴在后台留 ...
随机推荐
- Linux下的各文件夹的作用(转)
linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基 ...
- php闭包使用例子
一.依据闭包实现一个容器 class Di { private $factory; public function set($id, $value) { $this->factory[$id] ...
- Python魔法师
第一章:数据结构和算法 1.1 查找最大或者最小的n个元素 heapq 模块的两个函数 nlargest() nsmallest() import heapq nums = [1, 8, 2, 23 ...
- java web 中文乱码
开发环境:设设置idea的VM options:-Dfile.encoding=UTF-8 生产环境:在tomcat部署目录bin\catalina.bat中,set "JAVA_OPTS= ...
- JAVA 自动生成对应数据库表的JPA代码工具
http://blog.csdn.net/zheng2008hua/article/details/6274659 关键词:JPA 数据库表代码自动生成,JPA代码生成 自动生成对应数据库表的 ...
- MongoDB在Win10下的安装
原文地址:http://blog.csdn.net/polo_longsan/article/details/52430539 1.下载MongoDB在windows下的安装文件 首先去官网https ...
- C#代码用法
1.new的用法using System;using System.Collections.Generic;using System.Text;namespace yanz{public class ...
- Linux 下安装PHPunit
PHP 档案包 (PHAR) 要获取 PHPUnit,最简单的方法是下载 PHPUnit 的 PHP 档案包 (PHAR),它将 PHPUnit 所需要的所有必要组件(以及某些可选组件)捆绑在单个文 ...
- 配置远程maven仓库自己的步骤
---恢复内容开始--- 1.首先在远程服务器配置jdk.maven环境,这个可以在网上找 2.Nexus 安装与配置.这个见网上博客(https://blog.csdn.net/lewis_007/ ...
- [Hibernate开发之路](4)ID生成策略
一 对象关系数据库映射之Id 被映射的类必须定义相应数据库表主键字段.大多数类有一个JavaBeans风格的属性, 为每个实例包括唯一的标识. <id> 元素定义了该属性到数据库表主键字段 ...