基于XML管理bean
目录
实验一 [重要]创建bean
实验二 [重要]获取bean
实验三 [重要]给bean的属性赋值:setter注入
实验四 [重要]给bean的属性赋值:引用外部已声明的bean
实验五 [重要]给bean的属性赋值:内部bean
实验六 [重要]给bean的属性赋值:引入外部属性文件
实验七 给bean的属性赋值:级联属性赋值
实验八 给bean的属性赋值:构造器注入
实验九 给bean的属性赋值:特殊值处理
实验十 给bean的属性赋值:使用p名称空间
实验十一 给bean的属性赋值:集合属性
实验十二 自动装配
实验十三 集合类型的bean
实验十四 FactoryBean机制
实验十五 bean的作用域
实验十六 bean的生命周期
实验三 [重要]给bean的属性赋值:setter注入
1、给组件类添加一个属性
2、在配置时给属性指定值
3、测试
实验三 [重要]给bean的属性赋值:setter注入
1、给组件类添加一个属性
public class HappyComponent {
private String componentName;
public String getComponentName() {
return componentName;
}
public void setComponentName(String componentName) {
this.componentName = componentName;
}
public void doWork() {
System.out.println("component do work ...");
}
}
2、在配置时给属性指定值
通过property标签配置的属性值会通过setXxx()方法注入,大家可以通过debug方式验证一下
<!-- property标签:通过组件类的setXxx()方法给组件对象设置属性 -->
<!-- name属性:指定属性名(这个属性名是getXxx()、setXxx()方法定义的,和成员变量无关) -->
3、测试
@Test
public void testExperiment03() {
HappyComponent happyComponent3 = (HappyComponent) iocContainer.getBean("happyComponent3");
String componentName = happyComponent3.getComponentName(); System.out.println("componentName = " + componentName);
}
实验四 [重要]给bean的属性赋值:引用外部已声明的bean
1、声明新的组件类
2、原组件引用新组件
3、配置新组件的 bean
4、在原组件的 bean 中引用新组件的 bean5、测试6、易错点
实验四 [重要]给bean的属性赋值:引用外部已声明的bean
1、声明新的组件类
public class HappyMachine {
private String machineName;
public String getMachineName() {
return machineName;
}
public void setMachineName(String machineName) {
this.machineName = machineName;
}
}
2、原组件引用新组件
3、配置新组件的 bean
<property name="machineName" value="makeHappy"
4、在原组件的 bean 中引用新组件的 bean
<!-- ref 属性:通过 bean 的 id 引用另一个 bean -->
<property name="happyMachine" ref="happyMachine"/>
这个操作在 IDEA 中有提示:
5、测试
@Test
public void testExperiment04() {
HappyComponent happyComponent4 = (HappyComponent) iocContainer.getBean("happyComponent4");
HappyMachine happyMachine = happyComponent4.getHappyMachine();
String machineName = happyMachine.getMachineName();
System.out.println("machineName = " + machineName);
}
6、易错点
如果错把ref属性写成了value属性,会抛出异常: Caused by: java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'com.atguigu.ioc.component.HappyMachine' for property 'happyMachine': no matching editors or conversion strategy found 意思是不能把String类型转换成我们要的HappyMachine类型 说明我们使用value属性时,Spring只把这个属性看做一个普通的字符串,不会认为这是一个bean的id,更不会根据它去找到bean来赋值
实验五 [重要]给bean的属性赋值:内部bean
1、重新配置原组件
2、测试
实验五 [重要]给bean的属性赋值:内部bean
1、重新配置原组件
在bean里面配置的bean就是内部bean,内部bean只能在当前bean内部使用,在其他地方不能使用。
<property name="happyMachine">
<!-- 在一个 bean 中再声明一个 bean 就是内部 bean -->
<!-- 内部 bean 可以直接用于给属性赋值,可以省略 id 属性 -->
<bean class="com.atfun.ioc.component.HappyMachine">
<property name="machineName" value="makeHappy"/>
</bean>
</property>
2、测试
@Test
public void testExperiment04() {
HappyComponent happyComponent4 = (HappyComponent) iocContainer.getBean("happyComponent4");
HappyMachine happyMachine = happyComponent4.getHappyMachine();
String machineName = happyMachine.getMachineName();
System.out.println("machineName = " + machineName);
}
实验六 [重要]给bean的属性赋值:引入外部属性文件
1、加入依赖
2、创建外部属性文件
3、引入
4、使用
5、测试
实验六 [重要]给bean的属性赋值:引入外部属性文件
1、加入依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.3</version>
</dependency>
<!-- 数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.31</version>
</dependency>
2、创建外部属性文件
jdbc.user=root
jdbc.password=(你自己数据库password)
jdbc.url=jdbc:mysql://localhost:3306/mybatis-example
jdbc.driver=com.mysql.jdbc.Driver
3、引入
<context:property-placeholder location="classpath:jdbc.properties"/>
4、使用
<property name="url" value="${jdbc.url}"/>
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
点赞三连多多支持!!!!