Spring In Action学习笔记:Bean的简单装配
来源:互联网 发布:js调用servlet 编辑:程序博客网 时间:2024/05/20 20:45
装配Bean
Spring提供了三种主要的Bean装配机制
- 在xml中进行显示配置(便利的命名空间)
- 在Java中进行显示配置(相对于xml是类型安全的)
- 隐式的bean发现机制和自动装配
自动化装配bean
Spring从两个角度来实现自动化装配
- 组件扫描 : Spring会自动发现应用上下文中所创建的bean
- 自动装配 : Spring自动满足bean之间的依赖
创建可被发现的bean
package soundsystem;public interface CompactDisc{ void play();}---------------------@Compent //表明该类作为组件类并告知Spring为这类创建beanpublic class SgtPeppers implements CompactDisc{ private String title = "Sgt.Pepper's Lonely Hearts Club Band"; private String artist = "The Beatles"; public void play(){ System.out.println("Playing" + title + "by" + artist); }}--------------------------------组件扫描默认是不启用的 需要@ComponentScan注解 或在xml中配置package soundsystem;@Configuration@ComponentScan(basePackages={"...."})//basePackages指定要扫描的包,不指定的话默认为本类所在包public class CDPlayerConfig{}然后通过AnnotationConfigApplicationCotext加载CDPlayerConfig.class 即可xml启动...<beans ....> <context:component-scan base-package="" /> ....</beans>
为组件扫描的bean命名
@Component注解可给bean设置类似xml中的ID
如
@Component("lonelyHeartsClub")public classSgtPeppers{}不指定ID会默认为类名的第一个字母变为小写作为ID还有一种bean的命名方式 @Named("")
通过为bean添加注解实现自动装配
自动装配是让Spring自动满足bean依赖的一种方法 可以借助@Autowired注解
@Componentpublic class CDPlayer{ private CompactDisc cd; @Autowired public CDPlayer(CompactDisc cd){ this.cd = cd; }}@Autowired注解不仅能用在构造器上,还能用在属性的setter方法上 甚至用在类的任何方法上,因为setter方法并没有什么特别的@Autowired(required=false)required属性为false时 当自动装配没有匹配的bean时 这个bean处于未装配状态(容易出现NUllPointerException)也可以用@Inject
通过Java代码装配bean
优点是类型安全,重构友好
JavaConfig类的关键在于@Configuration 注解,以及@Bean注解
在JavaConfig中声明bean要编写一个方法创建所需类型的实例,并添加@Bean注解
@Configurationpublic class CDPlayerConfig{ @Bean //可通过name属性指定不同名字 public CompactDisc sgtPeppers(){ return new SgtPeppers(); } @Bean public CDPlayer cdPlayer(){ return new CDPlayer(sgtPeppers());//引用创建bean的方法注入 }}Spring会拦截所有对添加了@Bean注解的方法的调用,并确保直接返回该方法所创建的bean比如 @Bean public CDPlayer cdPlayer(){ return new CDPlayer(sgtPeppers());//引用创建bean的方法注入 } @Bean public CDPlayer anotherCDPlayer(){ return new CDPlayer(sgtPeppers());//引用创建bean的方法注入 }anotherCDPlayer 和之前的cdPlayer bean 完全一样
通过xml装配bean
简单声明
<bean id="compactDisc" class="soundsystem.SgtPeppers" />
不明确指定ID时 会默认根据全限定类名命名
如”soundsystem.SgtPeppers#0” #0表示计数,用来区分相同类型的其他bean
当Spring发现这个元素时,他将会调用SgtPeppers的默认构造器来创建bean
借助构造器初始化bean
- 元素
- 使用c命名空间
c命名空间声明
<beans ... xmlns:c="http://www.springframework.org.schema/c" ...> <bean id="cdPlayer" class="soundsystem.CDPlayer"> <constructor-arg ref="compactDisc" /> </bean> 等价于 <bean id="cdPlayer" class="soundsystem.CDPlayer" c:cd-ref="compactDisc"; > </bean>cd 表示构造器参数名 -ref表示要注入bean引用,也可以用参数的顺序来表示 如 c:_0-ref 只有一个参数时还可以c:_-ref将一个ID为compactDisc的bean引用传递到CDPlayer的构造器中
将字面量注入到构造器
当构造器为public BlankDisc(String title,String artist){ this.title = title; this.artist = artist;}<bean id=".." class=".."> <constructor-arg value="Sgt.Pepper's.."/> <constructor-arg value="The Beatles" />c命名空间<bean id=".." class=".." c:_0=".." c:_1=".." />
装配集合
装配集合是可以但C命名空间做不到的
如
当构造器为public BlankDisc(String title,String artist,List<String> tracks){ this.title = title; this.artist = artist; this.tracks = tracks;}bean id=".." class=".."> <constructor-arg value="Sgt.Pepper's.."/> <constructor-arg value="The Beatles" /> <constructor-arg> <list> <value>Sgt.Pepper...</value> <value>....</value> ... </list> </constructor-arg>如果list中是其他bean的引用的话bean id=".." class=".."> <constructor-arg value="Sgt.Pepper's.."/> <constructor-arg value="The Beatles" /> <constructor-arg> <list> <ref bean="beanid" /> ... </list> </constructor-arg>也可以按同样的方式使用<set>
属性注入
public class CDPlayer{ private CompactDisc cd; @Autowired public void setCDPlayer(CompactDisc cd){ this.cd = cd; }}<bean id = "cdPlayer" class="..."> <property name="compactDisc" ref="compactDisc" /></bean><property>元素为属性的set方法提供的功能与<constructor-arg>为构造器提供的功能一样<property>可用p命名空间代替<bean id = "cdPlayer" class="..." p:cd-ref=""></bean>cd 是属性的名字属性也可以注入字面量 以及list<bean id = "cdPlayer" class="..." p:title="Sgt.Pepper...." p:artist="...."></bean><bean id = "cdPlayer" class="..."> <property name="title" value="Sgt.Pepper...." /> <property name="artist" value="..."/> <property name="tracks"> <list> <value>....</value> ... </list> </property></bean></bean>
util命名空间
功能之一 提供元素,他会创建一个列表的bean,供引用
<util:list id="trackList"> <value>Sgt.....</value> .....</util:lsit><bean id="..." class="..." p:title = "..." p:artist = "..." p:tracks-ref="trackList" />
导入和混合配置
在JavaConfig中引用xml配置
使用@ImportResource(“classpath:cdconfig.xml”)在JavaConfig中导入其他Java配置
@Import(CDConfig.class)在Jxml中导入JavaCOnfig
<bean class = "***.CDConfig" />用<import resoune="***.xml"/> 导入其他xml配置
0 0
- Spring In Action学习笔记:Bean的简单装配
- Spring in Action 学习笔记—第二章装配Bean
- Spring in Action(第二章 装配 Bean)学习笔记
- spring in action-装配Bean
- 【Spring】【笔记】《Spring In Action》第二章 Bean装配
- Spring In Action 01 ---装配Bean
- Spring学习笔记之Bean的装配
- spring in action 学习笔记(八)自动装配
- Spring学习笔记-C2-Spring装配Bean
- Spring in Action入门之装配管理Bean
- Spring in action 01 -- 装配 Bean(@Autowired)
- Spring in action 03 -- 装配 Bean(xml配置)
- 《Spring In Action》 读书笔记(1) -- bean装配
- 《Spring In Action》 读书笔记(2) -- bean装配
- Spring In Action(一):基于注解装配bean
- Spring In Action(二):基于XML配置装配bean
- 学习笔记——Spring的Bean的装配
- [Spring]Bean的自动装配Autowire【学习笔记】
- php实现斐波那契数列的几种方式以及杨辉三角
- JSP项目从普通类中读取资源文件路径解决方案
- nginx+iis+redis 搭建的站点来解决session一致性的解决方案
- Listener监听器(ServletContextAttributeListener)
- 工具类:异步加载AsyncTask和用法
- Spring In Action学习笔记:Bean的简单装配
- GPL协议 与 LGPL协议
- java项目管理工具——maven
- 【积分】【概率】Probability, UVa11346
- UVA11324 The Largest Clique 强连通分量缩点+有向无环图最大点权和
- HDU 5573 Binary Tree(2015-ICPC-上海赛区)
- c宏定义
- VC中画基准线,随鼠标移动
- 三子棋C语言实现(多种模式任你选)