#11/n# 装配Bean
隐式的bean发现机制和自动装配
@Component 简单的注解表明该类会作为组件类,并告知Spring要为这个类创建bean
可以指定bean名,如@Component("guohao") 也可以不写名字 默认为首字母小写的类名
==@Named
组件扫描
放在配置文件上
java类
@ComponentScan 放在 @Configuration Spring将会扫描这个包以及这个包下的所有子包,查找带有@Component注解的类
也可以扫描指定包名@ComponentScan(" ") 或者 @ComponentScan(basePackages=" guohao")
又或者要扫描多个包,只需要将basePackages属性设置为要扫描包的一个数组即可:@ComponentScan(basePackages={" guohao",“wenwenwen”})
又或者 指定所包含的接口和类:@ComponentScan(basePackageClasses={guohao.class,wenwenwen.class})
XML
<context:component-scan base-packge=" "> 填包名
Assert.notNull(Object object) 断言某个值 不为空 如果不一样就抛出异常
自动装配
@Autowired可以用在构造器上,还可以用在属性的Setter方法上
@Autowired(required=false)
> 将required属性设置为false时,Spring会尝试执行自动装配,但 > 是如果没有匹配的bean的话,Spring将会让这个bean处于未装配的状 > 态。但是,把required属性设置为false时,你需要谨慎对待。如 果在你的代码中没有进行null检查的话,这个处于未装配状态的属性 > 有可能会出现NullPointerException。 ==@Inject
通过java代码装配Bean
创建配置类
@Configuration @Configuration注解表明这个类是一个配置类,该类应该包含在Spring应用上下文中如何创建bean的细节
@Bean注解会告诉Spring这个方法将会返回一个对象,该对象要注册为Spring应用上下文中的bean。方法体中包含了最终产生bean实例的逻辑。 默认情况下,bean的ID与带有@Bean注解的方法名是一样的。 也可以设置 @Bean(“guohao”)
实现注入
调用方法注入
@Bean
public CDPlayer cdPlayer(){
return new CDPlayer(sgtPapper() );
}
sgtPeppers()方法上添加了@Bean注解, Spring将会拦截所有对它的调用,并确保直接返回该方法所创建的 bean,而不是每次都对其进行实际的调用
使用接口 DI方法
@Bean
public CDPlayer cdPlayer( CompactDisc compactDisc){
return new CDPlayer( compactDisc);
} **CompactDisc 是接口**
在这里,cdPlayer()方法请求一个CompactDisc作为参数。当 Spring调用cdPlayer()创建CDPlayerbean的时候,它会自动装配 一个CompactDisc到配置方法之中。然后,方法体就可以按照合适 的方式来使用它。借助这种技术,cdPlayer()方法也能够 将CompactDisc注入到CDPlayer的构造器中,而且不用明确引 用CompactDisc的@Bean方法。 通过这种方式引用其他的bean通常是最佳的选择,因为它不会要求 将CompactDisc声明到同一个配置类之中。在这里甚至没有要 求CompactDisc必须要在JavaConfig中声明,实际上它可以通过组件 扫描功能自动发现或者通过XML来进行配置。你可以将配置分散到多 个配置类、XML文件以及自动扫描和装配bean之中,只要功能完整健 全即可。不管CompactDisc是采用什么方式创建出来的,Spring都 会将其传入到配置方法中,并用来创建CDPlayer bean。
Set方法注入
上述是构造器注入 也可以是Set方法注入 ![set方法][1]
通过XML装配bean
java类只需要一个@Configuration 而 使用XML时,需要在配置文件的顶部声明多个XML模式(XSD)文件
声明 Bean
bean的ID将会 是“soundsystem.SgtPeppers#0”。其中,“#0”是一个计数的形 式,用来区分相同类型的其他bean。如果你声明了另外一 个SgtPeppers,并且没有明确进行标识,那么它自动得到的ID将会 是“soundsystem.SgtPeppers#1”
指定id
<bean class-=”com.guohao.helloworld” id=”guohao”/ >
构造器注入初始化bean
元素
<bean id="" class=" " >
<constructor-arg ref ="" />
</bean>
装配字面量: 构造函数有几个参数就写几个下面这句话
装配集合 列表为字面量
<constructor-arg
<list
<value> ....</value>
<value> ....</value>
<value> ....</value>
/>
/>
在装配集合方面,
列表为bean
<constructor-arg
<list
<ref bean="">
<ref bean="">
<ref bean="">
/>
/>
c名称空间
文件头部加一个 xmls:c=” …………………”
<bean id="" class=" " c:cd-ref= " 要注入的beanid" />
</bean>
装配字面量: 构造函数有几个参数就写几个下面这句话
c:_0-ref= " 要注入的beanid"
c:_1-ref= " 要注入的beanid"
cd为构造器参数名
装配集合
属性注入
╰(*°▽°*)╯ (dadaguo-dadaguo)