一、Spring配置的可选方案(配置Bean)
简述:Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系。
三种装配机制:
1.XML中显示配置
2.Java中显示配置
3.隐式的bean发现机制和自动装配
二、自动化装配bean
1.组件扫描–>Spring会自动发现应用上下文中所创建的bean
2.自动装配–>Spring自动满足bean之间的依赖
在JavaConfig中
@Component
public class CD1 implements CompactDisc{
@Override
public void play() {
System.out.println("播放CD1的音乐!");
}
}
@component注解
告知Spring要为这个创建bean
同时我们需要在JavaConfig
1.添加@configuration
2.添加@componentScan
在xml文件中开启组件扫描
<context:component-scan base-package="你想扫描的包"/>
@RunWith(SpringJUnit4ClassRunner.class)
自动加载上下文
@ContextConfiguration(classes=xxx.class)
这个注解告诉我们我从xxx.class作为配置类。
三、为组件扫描的bean命名和基础包命名
1、组件扫描命名
@Component(“abc”)
给了组件命名。
2、ComponentScan命名基础包
1.ComponentScan(“xxx”) or ComponentScan(basePackages=“xxx”)
设置了扫描的基础包
3.ComponentScan(basePackages={“xxx”,“yyy”})
设置了扫描的为xxx,与yyy的基础包
四、自动装配bean
@Autowired实现了自动装配
无论是setter与构造器均可。
一、通过JavaConfig来创建
@Bean
声明简单的bean
带@Bean注解的方法可以采用任何必要的Java功能来产生bean
二、通过xml来创建bean
1.首先用<beans><beans/>相当于@configuration
2.然后我们在<beans>里面写<bean>来装配bean
一个简单的bean
<bean id="simpleBean" class="xxxx"/>
id是bean的名字,class是他所属的类
如果不取名,则名字生成为bean的 class的小写字母开头和#0 (从0开始计数)
构造器注入bean
使用< constructor-arg >
<bean id="simpleBean" class="xxxx">
//构造器的参数 1.参数是其他bean
<constructor-arg ref="其他bean的id">
//2.参数是普通值
<constructor-arg value="aaaaaa">
<bean/>
使用c:
<bean id="x" class="xx" c:_参数名-ref=""/>
<bean id="x" class="xx" c:_参数名="值"/>
<bean id="x" class="xx" c:_0="值"/>
当参数是list时:
<constructor-arg>
<list>
<ref bean="bean的id">
或者
<value>asdasdasd</value>
</list>
</constructor-arg>
当一个类中有许多属性时
我们可以使用属性注入
public class NewKnight implements Knight{
private Sword sword;
public NewKnight(Sword sword){
this.sword = sword;
}
@Override
public void test(){
sword.use();
}
@Override
public void testWithAop() {
System.out.println("我捐钱了");
}
}
使用bean直接装配
<bean>
<property name="xxx" ref="xxx">
<property name="xxx" value="xxx">
</bean>
五、导入和混合配置
1.在JavaConfig中引入JavaConfig
@import(xxx.class)
2.在JavaConfig中引入xml配置文件
@importResourse("classpath:xxx.xml")
3.在xml中引用xml
<import resoune="xxxxx.xml"/>
4.xml中引用javaconfig
直接定义成bean即可