spring装配bean
来源:互联网 发布:杨修之死 知乎 编辑:程序博客网 时间:2024/05/17 03:56
spring提供了三种主要的bean装配机制:
在XML中进行显示配置;
在java中进行显示配置;
隐式的bean发现机制和自动装配;
其中
spring从两个角度实现自动化装配:
组件扫描(component scanning):spring会自动发现应用上下文中创建的bean;
自动装配(autowiring):spring自动满足bean之间的依赖;
1.spring自动化装配bean
1.1组件扫描
1.1.1创建可被发现的bean
public interface CompactDisc { void play();}@Componentpublic class SgtPeppers implements CompactDisc { private String title = "title"; private String artist = "the beatles"; public void play() { System.out.println("playing " + title + "by " + artist); }}
注意@Component注解,这个注解表明该类会作为组件类,并告知spring要为这个类创建bean;
但是组件扫描默认不启用,需要显示配置spring从而命令它去寻找带@Component的类,并创建bean;如下所示:
@Configuration
@ComponentScan
public class CDplayerConfig {
}
@ComponentScan会启用组件扫描;它会默认扫描与配置类相同的包;
也可以使用xml来启用组件扫描,即spring context命名空间中的component-scan;
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="chapter2" /></beans>
1.1.2为组件扫描的bean命名
spring应用上下文中所有bean都会给定一个ID,如果没有显示指定,sping默认将类名的首字母小写,作为bean的id;
可以显示指定bean的id(有2中方法):
第一种:
@Component("heartsClub")public class SgtPeppers implements CompactDisc {
第二种:
@Named(“name”)
@Named可以作为@Component注解的替代方案,但有一些细微差别。
1.1.3 设置组件扫描的基础包
@Configuration@ComponentScan(basePackages={"package1", "package2"})public class CDPlayerConfig{}
这种缺点是,如果重构代码,所指定的基础包会出现错误;
所以可以将其指定为包里所含的类或接口,这些类所在的包将会作为组件扫描的基础包:
@Configuration@ComponentScan(basePackages={CDPlayer.class, DVDPlayer.class})public class CDPlayerConfig{}
1.2.自动装配
自动装配就是让Spring自动满足bean依赖的一种方法。
自动装配可以借助@Autowired注解。
@ComponentScanpublic class CDPlayer { private CompactDisc cd; @Autowired public CDPlayer(CompactDisc cd) { this.cd = cd; }}
@Autowired可以用在构造器、Setter方法。
@Autowired public void insertDisc(CompactDisc cd) { this.cd = cd; }
如果没有匹配的bean,在创建应用上下文时,spring会抛异常,可以@Autowired(required=false),则spring会让这个bean处于未装配状态。
如果有多个bean都满足依赖关系时,spring会抛出异常;
@Autowired也可以用@Inject替代;(@Inject/@Named来源于java依赖注入规范)
2.装配bean
2.1java代码装配bean
组件扫描与自动装配有时行不通,例如想要将第三方组件装配到应用中时,可以显式装配,方法是java代码/XML装配;
创建配置类
@Configuration
注解表明某个类是配置类,该类包含在spring 应用上下文中创建bean的细节。
springxml文件中,装配bean的最基本的XML元素位于spring-bean模式之中,是该模式的一个元素,是spring配置文件的根元素。
声明简单的类
@Bean public SgtPeppers sgtPeppers(){ return new SgtPeppers(); }
@Bean告诉spring这个方法会返回一个对象,这个对象要被注册为spring应用上下文中的bean;
等同的XML配置为:
<bean class="com.SgtPeppers" id="sgtPeppers">
这里如果id没定义,默认是com.SgtPeppers#0,之后默认数字递增。最好定义id。
当spring发现这个bean时,会调用默认构造器创建bean;这点没有java创建强大,java可以随意通过各种方法创建bean;
借助spring tool suite,spring的IDE检查配置的合法性;
注入bean
@Bean public CDPlayer cdPlayer() { return new CDPlayer(sgtPeppers()); }
这里注意,因为sgtPeppers()方法上添加了@Bean注解,spring会拦截所有对他的调用,并确保直接返回该方法所创建的bean;
默认情况下,spring创建的bean都是单例的。
XML注入,采用构造器注入/
构造器注入:
<bean id="cdplayer" class="com.Cdplayer"> <constructor-arg ref="sgtPeppers"/> <constructor-arg value="sgtPeppers"/> </bean>
也可使用c命名空间;
java配置类中引入xml配置文件的方法:
@ImportResource("classpath:test-config.xml");
xml中引入java配置类的方法:
<bean class="com.competDisc"/>
- Spring Bean装配-自动装配
- spring 基本Bean装配
- Spring Bean 初级装配
- Spring Bean 高级装配
- Spring中装配bean
- Spring bean装配
- spring装配bean
- Spring笔记---装配Bean
- Spring 装配Bean
- Spring配置文件 装配Bean
- Spring-Bean的装配
- Spring之装配Bean
- Spring装配bean
- Spring Bean装配-resouce
- spring(2)装配Bean
- Spring学习-装配Bean
- spring装配Bean
- spring IOC装配bean
- OpenStack--网络环境实践(一)
- HTTP缓存机制
- Anaconda
- 利用rapidjson解析嵌套的json
- c++知识点----输出宽度填充以及运算符重载
- spring装配bean
- Java 接口的加深理解
- 数据结构之从有序的顺序表中删除所有其值重复的元素,使表中的元素均不相同
- 面向对象思想的设计原则
- CTEX2.9.2+Texmaker+SumatraPDF
- CF 163D Large Refrigerator
- 抽象工厂模式和工厂模式的区别
- 2017.9.30 物流运输 思考记录
- JVM (PART IV)对象的访问定位