Spring之Bean的配置方式
在博客中为了演示容器Bean实例化时暴露出的几个接口,将UserBean配置在XML中,其实常见的Bean的配置有3种。1.基于xml配置Bean 2.使用注解定义Bean 3.基于java类提供Bean定义信息。
一、基于xml配置Bean
基于XML配置Bean时,Spring通过<bean>配置来实例化、设置bean的属性以及设置bean间的相互依赖性。一个<bean>通常需要定义id和class属性。class属性是必须的,不然Spring怎么知道是哪个呢。id不是必须的,不过如果配置文件中配置的其他bean要引用该bean,则id也是必须的,通常都加上。
<bean id="user" class="com.demo.model.UserBean"></bean>
二、使用注解定义Bean
如果采用基于XML的配置,bean定义信息和bean实现类本身是分离的,而采用基于注解的配置方式时,bean定义信息即通过在bean实现类上标注注解实现。在第二章节中定义Air和Person时都使用了@Component来注解bean。
package com.demo.model; import org.springframework.stereotype.Component; @Component
public class CleanAir implements IAir {
@Override
public String toString() { return "CleanAir";
}
}
我们使用@Component注解在CleanAir 类声明处对类进行标注,它可以被Spring容器识别,Spring容器自动将POJO转换为容器管理的bean。它和<bean id="CleanAir" class="com.demo.model.CleanAir"></bean>是等效的。除了@Component以外,Spring提供了3个功能基本和@Component等效的注解,它们分别用于对DAO、Service及Web层的Controller进行注解,所以也称这些注解为Bean的衍型注解:
@Repository:用于对DAO实现类进行标注;
@Service:用于对Service实现类进行标注;
@Controller:用于对Controller实现类进行标注;
那问题来了:既然都是bean,为什么还提供4个,因为这样让注解的用途更加清晰,而且不同的注解也有各自特殊的功能。
三、基于java类提供Bean定义
在普通的POJO类中只要标注@Configuration注解,就可以为spring容器提供bean定义的信息了,每个标注了@Bean的类方法都相当于提供了一个bean的定义信息。
package com.demo.model; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; @Configuration
public class AppConf { @Bean
public CleanAir cleanAir(){
return new CleanAir();
}
@Bean
public DirtyAir dirtyAir(){
return new DirtyAir();
} @Bean
public Person person(){
return new Person(dirtyAir());
}
}
我们只需在xml中配置开启context扫描即可实现bean的配置。省去了配置Person、DirtyAir。
<context:component-scan base-package="com.demo.model"/>
<bean id="conf" class="com.demo.model.AppConf"/>
ApplicationContext context=new ClassPathXmlApplicationContext(new String[]{"ApplicationContext.xml"});
BeanFactory factory=context;
AppConf conf=(AppConf)factory.getBean("conf");
conf.person().Breath();
输出结果:
DirtyAir
基于java类的配置方式和基于XML或基于注解的配置方式相比,前者通过代码的方式更加灵活地实现了Bean的实例化及Bean之间的装配,但后面两者都是通过配置声明的方式,在灵活性上要稍逊一些,但是配置上要更简单一些。
Spring之Bean的配置方式的更多相关文章
- Spring框架(2)---IOC装配Bean(xml配置方式)
IOC装配Bean (1)Spring框架Bean实例化的方式提供了三种方式实例化Bean 构造方法实例化(默认无参数,用的最多) 静态工厂实例化 实例工厂实例化 下面先写这三种方法的applicat ...
- Spring框架bean的配置(2):SpEL:引用 Bean、属性和方法。。。
将这些架包放入在工程目录下建立的lib文件夹里,并解压 commons-logging-1.1.1 spring-aop-4.0.0.RELEASE spring-beans-4.0.0.RELEAS ...
- spring+hibernate 配置多个数据源过程 以及 spring中数据源的配置方式
spring+hibernate 配置多个数据源过程 以及 spring中数据源的配置方式[部分内容转载] 2018年03月27日 18:58:41 守望dfdfdf 阅读数:62更多 个人分类: 工 ...
- 【Spring3.0系列】---Bean不同配置方式比较 和适用场合
Bean不同配置方式比较1.基于XML配置定义:在XML文件中通过<bean>元素定义Bean,例如<bean class="com.bbt.UserDao"/& ...
- Spring中Bean的配置:基于XML文件的方式
Bean的配置一共有两种方式:一种是基于XML文件的方式,另一种是基于注解的方式.本文主要介绍基于XML文件的方式 <bean id="helloWorld" class=& ...
- springmvc学习指南 之---第25篇 Spring Bean有三种配置方式
writed by不要张艳涛, 从tomcat转到了springmvc 现在开始有点不知道该看什么书了,看完了springmvc 学习指南之后 又查了一些书,好多都是内容相近,在找书的过程之中,发现s ...
- Spring中bean的配置
先从IOC说起,这个概念其实是从我们平常new一个对象的对立面来说的,我们平常使用对象的时候,一般都是直接使用关键字类new一个对象,那这样有什么坏处呢?其实很显然的,使用new那么就表示当前模块已经 ...
- (转) Spring读书笔记-----Spring的Bean之配置依赖
前一篇博客介绍了Spring中的Bean的基本概念和作用域(Spring读书笔记-----Spring的Bean之Bean的基本概念),现在介绍Spring Bean的基本配置. 从开始我们知道Jav ...
- spring实例化bean三种方式
我看了这篇博文<https://www.cnblogs.com/zhanglei93/p/6221546.html>,以及自己实践总结了关于spring实例化bean对象的3种方式. 一. ...
随机推荐
- 73.解决Xcode10 library not found for -lstdc++ 找不到问题
Xcode10 彻底废除了libstdc++,相关文件libstdc++.6.0.9.dylib.libstdc++.6.dylib.libstdc++.dylib.libstdc++.6.0.9.t ...
- Nodejs之路:非I/O的异步API
本篇主要介绍setTimeout,setInterval,setImmediate和process.nextTick. 1,定时器 Node中的定时器和浏览器中用法一致.区别在于:在Node中,执行到 ...
- python模块:configparser
"""Configuration file parser. A configuration file consists of sections, lead by a &q ...
- git 中Pull/Request 的初步
1. 目的: pull/request (简称PR) 是 项目管理者(管理者)和项目开发者(开发者)之间提交和确认工作成果的机制. 2. 流程: 开发者: 在本地创建特性分支. > git ch ...
- 6. ASP.NET MVC 5.0 中的HTML Helper【HTML 帮助类】
这篇文章,我将带领大家学习HTML Helper.[PS:上一篇-->5.ASP.NET MVC 中的Area[区域]是什么] HTML Helpers是用来创建HTML标签进而创建HTML控件 ...
- 迁移桌面程序到MS Store(5)——.NET Standard
接下来的几篇,我想讨论下迁移桌面程序到MS Store,可以采用的比较常见.通用性比较强的实施步骤和分层架构. 通常商业项目一般都是不断的迭代,不太可能突然停止更新现有的桌面版本,然后花很长时间从头来 ...
- 从文本中读取字符——feof函数问题
feof()函数 函数原型:int feof(FILE *fp): 函数功能:检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0,文件结束符只能被clearerr()函数清除 (函数feof ...
- 7.ViewPagerIndicator
ViewPager指针项目,在使用ViewPager的时候能够指示ViewPager所在的位置,就像Google Play中切换的效果一样,还能使用在应用初始化的介绍页面</item> ...
- JavaScript在IE和Firefox的不兼容问题解决方法总结
1.兼容Firefox的 outerHTML,Firefox中没有outerHtml的方法. if (window.HTMLElement) { HTMLElement.prototype.__def ...
- Servlet案例7:jsp技术及案例
jsp运行原理: 根据jsp文件创建java文件(servlet),并编译运行 第一次访问时会被翻译成servlet后执行 jsp三个指令: 1.page指令:页面翻译运行的属性的配置(通常使用默认) ...